운영체제(1)

Flash·2023년 3월 8일
0

운영체제

목록 보기
2/3
post-thumbnail

조성호님의 쉽게 배우는 운영체제를 읽으며 정리한 글입니다.

프로세스의 개요

프로세스란 하나의 작업 단위이다. 폰노이만 구조에 따라 프로그램은 메모리 위에 올려져야만 실행될 수 있다고 했다. 이렇게 메모리 위에 올려진 하나의 프로그램을 프로세스라고 한다.

사용자가 작동시키는 프로그램이 곧 사용자 프로세스이고, 운영체제도 메모리 위에 올려야 한다고 했기에 이는 곧 커널 프로세스가 되는 것이다.

한 번에 하나의 요리만 해서 한 명의 손님만 받으면 요리사는 쉬게 된다. 즉, 코스 요리를 제공하는 식당일 경우 각 손님들의 순서에 따라 코스요리 구성품을 손님별로 차례대로 제공해 나가듯이 운영체제도 여러 프로세스들을 시분할 방식으로 처리한다. 따라서 프로세스들 간에 실행되는 순서가 있으며 execute status 와 그 외의 status 들이 있다.

마치 요리 주문서처럼 각 프로세스들에 대한 정보가 필요하다. 이를 담은 자료구조가 바로 PCB다. 하나의 프로세스가 생성되면 운영체제가 하나의 PCB를 만드는 것이다. PCB는 운영체제 영역에 있고, 프로세스들은 사용자 영역에 있다.

PCB에는 여러 정보가 들어가지만 대표적 3가지를 이야기해보자.

  1. PID - 프로세스를 식별할 수 있어야 한다.
  2. 메모리 정보 - 이 프로세스가 메모리의 어디에 위치해있는지를 알아야 한다.
  3. 중간값 정보 - 이 프로세스가 어디까지 실행됐는지(Program Counter), 진행 중인 작업의 중간값을 담은 레지스터 등을 저장한다.

프로세스의 상태

지금 당장 실행 중인 프로세스가 있을테고 그 외의 프로세스들이 있을 것이다. 상태를 구분함으로써 관리하게 된다.

  1. 생성 상태 - PCB 하나를 할당받는다.
  2. 준비 상태 - CPU 를 할당 받기를 기다린다.
  3. 실행 상태 - CPU 를 할당 받아 실제로 실행된다.
  4. 종료 상태 - PCB 가 폐기된다.

2 -> 3 으로 갈 때 dispatch 된다고 한다. 그리고 계속 실행되는 것이 아니라 할당 받은 시간(타임 슬라이스)을 다 채우면 timeout 이라는 인터럽트가 발생되어 2로 돌아간다.

하지만 CPU 스케줄러에 의해 다 커버되지 않는 경우도 있다. 바로 입출력 관리자의 개입이 필요할 때다. 이때도 마찬가지로 인터럽트가 발생되는데 2로 돌아가는 것이 아니라 대기 상태로 가게 된다. 새로운 상태에 대해 배우게 된 것이다! 대기 상태에 있다가 입출력이 완료되면 준비 상태로 돌아가게 되는 것이다. 그러다가 다시 실행 상태로 진입하게 될 것이다.

근데 여기에다 추가적으로 '보류' 라는 개념이 나오게 된다. 이 '보류' 라는 개념은 왜 필요하게 된 걸까?

활성(active) 상태와 반대되는 이 '보류' 라는 상태는 메모리가 꽉 차는 등의 외부적 요인으로 인해 마치 쫓겨난 상태를 말한다.

  • 메모리가 꽉 차서 프로세스가 메모리 밖으로 밀려나거나,
  • 프로그램에 오류가 있거나
  • 악의적 바이러스가 감지되거나
  • 매우 긴 주기로 실행되기 때문에 메모리 밖으로 나가도 되거나
  • 입출력이 계속 지연될 때

보류 상태로 밀리게 된다. 이때의 프로세스는 메모리가 아닌 스왑 영역에 위치하게 된다. 메모리에서 쫓겨난 데이터가 임시로 보관되는 곳이다. 그러다가 다시 재시작되면 활성 상태로 이동하게 된다.

보류 상태는 '준비 상태'와 '대기 상태'에 붙는다. 대기 상태에서 보류되면 보류 대기 상태, 재시작되면 대기 상태로 복귀. 입출력 완료의 인터럽트가 발생하면 보류 준비 상태로 이동하게 된다.

준비 상태에서 보류되면 보류 준비 상태, 재시작되면 준비 상태로 복귀한다.

profile
개발 빼고 다 하는 개발자

0개의 댓글