카테고리 없음
[운영체제] 5. Process 1
윤카일
2022. 11. 13. 21:06
프로세스의 개념
실행 중인 프로그램!
프로세스의 문맥(크게 3가지로 구분 가능)
- 하드웨어 문맥
- PC : code부분의 명령어 중, 현재 어디를 읽고 있었냐
- 각종 레지스터 : 각종 계산을 하기 위한 값들
- 프로세스의 주소 공간
- 메모리와 관련된 부분
- 현재 code, data, stack에 어떤 내용이 들어가있는가
- 프로세스 관련 커널 자료 구조
- PCB
- 운영체제는, 자원을 관리하는 역할을 한다.
- 그 중, 프로세스들을 관리하는 역할 또한 한다
- 이를 위해, data 영역에 각 프로세스마다 PCB라는 자료구조를 두게 된다.
- Kernel Stack
- 운영체제도 커널이라는 메모리 공간을 차지하고 있는 프로그램이다. 그래서 code, data, stack 이라는 영역을 가지고 있다.
- 운영체제가 code를 실행하고, 함수를 호출하면 stack에 함수를 쌓는 과정을 진행할 것이다. 그런데, 운영체제의 code는 사용자 프로그램 간의 공유 코드라고 할 수 있다. 그래서 커널이, 어떤 사용자 프로그램의 부탁을 받고 실행하는지를 기억해두어야 한다.
- 이를 위해, 커널 스택을 사용자 프로그램(프로세스)마다 하나씩 두고 있다.
- PCB
프로세스의 상태
- Running
- Ready
- CPU를 주기만 하면 당장 명령어를 실행할 수 있는 상태(메모리에 명령어 수행을 위한 부분이 다 올라와있음)
- Blocked
- CPU를 주어도 당장 명령어를 수행할 수 없는 상태
- New, Terminated
- 생성 중인 상태, 종료인 상태(정리하는 상태)
[프로세스가 위치하는 공간과, 그에 따른 상태]
프로세스가 위치할 수 있는 여러 공간들을 표시해두었다.
- CPU를 가지고 있는 상태 = running
- Ready queue에 있는 상태 = ready
- Disk I/O queue에 있는 상태 = blocked
- keyboard I/O queue에 있는 상태 = blocked
- Resource queue에 있는 상태 = blocked
- 위와 같은 공간들에 프로세스가 있을 수 있고, 각각마다 어떤 상태인지 표시해둔 그림이라고 생각하면 된다.
(큐를 어떤 별개의 물리공간처럼 표현해두었지만, 사실 큐라는 것은 아래와 같이, 커널의 data 공간에, 자료구조로 큐를 만들어두고 프로세스를 넣어두는 것이다)
PCB
- 프로세스를 관리하기 위한 자료구조이다.
- 커널 (커널 주소 공간)의 data 영역에 각 프로세스의 PCB가 저장되게 된다.
- 구성요소
- 프로세스의 하드웨어 문맥
- PC, register
- 프로세스의 주소공간의 위치정보
- 메모리내에서, 프로세스의 code, data, stack 의 위치정보
- OS가 관리상 사용하는 정보, 파일 관련 정보
- 프로세스의 하드웨어 문맥
문맥 교환(context switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때, 운영체제가 수행하는 것
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
[주의점]
(1) 사용자 프로세스로부터 운영체제로 CPU가 넘어가는 것을 context switch라고 부르진 않는다!
- 운영체제에서 CPU가 다른 프로세스로 넘어가게 되면, 이땐 context switch가 맞다
(2) 사용자 프로세스 -> 사용자 프로세스로 CPU가 넘어갈 때, context switch다!