day03 - 프로세스 관리
1. 프로그램의 실행(메모리 load)
physical memory와 virtual memory가 있음
1) virtual memory : code, data, stack으로 구성됨
스택 : 커널의 스택은 각 프로세스마다 별도로 두고 있음
2. 사용자 프로그램이 사용하는 함수
라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 갖다쓴 함수. 자신의 프로그램의 실행 파일에 포함됨
커널 함수 : 운영체제 프로그램의 함수. 커널함수 호출=시스템 콜
내 프로그램 실행 코드에 포함되는 것이 아니라 커널에 포함되는 함수
ex) 내 함수 또는 라이브러리 함수를 실행할 경우 전부 내 프로그램 안에서 실행되는 것
but 디스크에서 파일을 읽어오는 함수를 호출하는 것은 커널에서 실행되는 함수를 호출하는 것
-> 커널함수=가상메모리의 주소공간을 가로질러 cpu 제어권을 운영체제에 넘겨야 하는 실행
커널모드 = mode bit이 0일 때 = 운영체제가 cpu를 쓰고 있는 경우이기 때문에 뭐든지 다 할 수 있음
유저모드 = mode bit이 1일 때 = 운영체제가 사용자 프로그램에게 cpu를 넘겼을 때. 제한된 기계어만 실행 가능
3. 프로세스의 개념
1) 프로세스의 문맥(context)
: cpu 수행상태를 나타내는 하드웨어 문맥
: 프로그램 카운터
: 각종 register
: 프로세스의 주소공간 - code, data, stack
: 프로세스 관련 커널 자료 구조 - PCB(Process Control Block), Kernal stack
PCB : 운영체제 커널의 주소공간(code, data, stack) 각각에서 하나씩 PCB를 가짐.
2) 프로세스의 상태
: running
: ready - 메모리 등 다른 조건을 모두 만족하고 cpu를 기다리는 상태
: blocked(wait, sleep) - cpu를 주어도 당장 instruction을 수행할 수 없는 상태,
자신이 요청한 event가 즉시 만족되지 않아 기다리는 상태 등
- 요청한 event가 만족되면 ready
: suspended(stopped) - 외부 요인으로 프로세스 수행이 정지된 상태->프로세스는 통째로 디스크에 swap out됨
ex) 사용자가 프로그램을 강제 정지시킨 경우.
- 외부에서 resume해주어야 active됨
: terminated - 수행(execution)이 끝난 상태
*blocked와 suspended의 차이점 - blocked는 시스템은 계속 돌아가는 상태. suspend는 모두 stop된 상태
3) 문맥 교환(context switch)
문맥을 넘겨주는, 넘겨받는 프로세스의 상태를, 그 프로세스의 운영체제가 관리하고 있는 PCB에 저장.
(1) : 사용자 프로세스가 변경되지 않으므로 문맥교환이 아님