티스토리 뷰
인프런에 무료로 공개되어 있는 주니온님의 운영체제 공룡책 강의 내용을 정리한 글입니다. 수강해보시는 걸 추천드려용
프로세스의 개념
OS의 가장 기본적인 역할은 프로세스를 관리하는 것이다. Storage에 있는 프로그램을 Memory에 load 하면, 실행 중인 프로그램(program in execurtion)이 된다. 이것이 프로세스이다.
- Text section : 실행 가능한 코드를 저장하는 영역, 코드 영역이라고도 함.
- Data section : 전역 변수를 저장하는 영역
- Heap section : 프로그래머가 필요에 따라 직접 메모리를 할당하는 영역
- Stack section : 함수를 호출할 때 파라미터나 반환 주소, 지역 변수 등을 저장하는 영역
프로세스의 상태 및 생명 주기
- New : 프로세스가 막 생성된 상태
- Running : 프로세스가 cpu를 점유해서 해당 프로세스의 명령어를 cpu가 실행하는 상태
- Waiting : 프로세스가 종료되진 않았지만, cpu 점유를 기다리고 있는 상태
- Ready : ready queue에서 cpu를 점유할 준비가 되어있는 상태
- Terminated : 프로세스가 종료된 상태
PCB (Process Control Block)
프로세스를 관리하기 위해 프로세스가 가져야 하는 모든 정보를 저장하기 위해 만들어진 구조체
- Process state
- Program counter
- CPU registers
- CPU-scheduling information, Memory-management information... 등등
프로세스를 single thread of execution이라고 하고, 이러한 프로세스를 여러 개 동시에 실행하는 것을 multitasking 또는 multiprocessing이라고 한다. 또한, 프로세스가 여러 개의 쓰레드를 갖게 할 수 있는데 이를 multithreading이라고 한다. 이 때 thread는 프로세스 안의 더 작고 가벼운 프로세스를 의미한다.
프로세스 스케쥴링
MultiProgramming의 목적은 동시에 여러 프로세스를 실행시키는 것이다. 이 때 Time Sharing을 하게 되는데, 이를 위해 스케쥴링을 한다.
스케쥴링 큐
실행 중인 프로세스에 I/O가 들어오면 Wating queue로 갔다가 Ready queue로 간다.
Queueing Diagram
Context Switch (문맥 교환)
Context란 프로세스가 사용되고 있는 상태라고 볼 수 있다. 이 상태는 PCB에 저장되어 있다. 즉, PCB 정보가 문맥이라고 볼 수 있다. Cotext Switch는 CPU를 다른 프로세스에 넘겨주는 것이다.
- 실행 중인 프로세스 상태를 해당 PCB 저장
- 다른 프로세스의 상태를 해당 PCB에서 로드
프로세스 운영
프로세스를 실행 시 두 가지 가능성
- 부모가 자식을 fork 하고 부모와 자식이 동시에 실행되는 경우
- 부모는 실행하지 않고 자식의 종료를 기다리는 경우
주소-공간 측면에서 두 가지 가능성
따라서 프로세스 공간을
- 프로세스가 중복된 메모리 공간을 갖는 경우
- 따로 메모리 공간을 갖는 경우
좀비와 고아
- 좀비 프로세스 - 프로세스를 분기 한 뒤 부모 프로세스는 따로 실행하고 있는 경우
- 고아 프로세스 - 프로세스를 분기한 뒤 부모 프로세스가 종료돼버린 경우
프로세스 생성
- UNIX 기반에서는 fork()라는 시스템 콜을 통해 프로세스 생성
- 자식 프로세스는 주소 공간을 복사하는 것이다. 이후 둘 다 실행
- fork 했을 때, 자식 프로세스 id는 0으로 반환
fork 이후
- 부모 프로세스는 실행을 계속하거나
- wait() 시스템 콜 통해 자식 프로세스가 종료된 후 interrupt를 걸어주길 기다림
execlp 시스템 콜
- 전달받은 파라미터를 fork로 생성된 프로세스에 덮어쓰는 명령
- UNIX 기반 운영 체제에서는 fork로 프로세스를 생성하기 때문에 전혀 다른 일을 하고 싶을 때 사용
댓글