본문 바로가기

한권떼기/운영체제(Operating System Concepts)

[한권떼기] 운영체제 02번째. 프로세스와 프로세스 API

728x90
반응형

**본 글의 일부분은 서적 'Operating Systems: Three Easy Pieces by Remzi H.Arpaci-Dusseau, Andrea C.Arpaci-Dusseau', 'Operation System Concepts Abraham Silberschatz 외 2' 내의 이미지와 내용을 포함하고 있습니다.

 

프로세스

메모리 공간을 가지고 실행중인 프로그램을 의미 (<-> 프로그램: 디스크 저장 공간에 저장된 데이터)

 

 

프로세스는 다음의 자원이 필요

1. 메모리(address space):

코드

데이터 (전역변수 ..)

스택 (지역변수, 함수 매개변수, 리턴 주소.. )

힙 (동작으로 필요한 공간을 할당할 곳, malloc()... )

2. 레지스터: PC카운터, 스택포인터

 

 

프로세스의 동작 순서

Fetch (명령어 읽기) -> Decode (명령어 분석) -> Execute (명령어 수행) -> Update PC (다음 명령어의 위치로 업데이트)

 

여러 개의 프로세스가 동작하는 방식

CPU 가상화

한정된 자원인 CPU가 하나일 때, 여러 개의 프로세스는 번갈아가면서 순서에 따라 실행됨

하나의 프로세스가 가지고 있는 타임퀀텀이 끝나면 다음 프로세스로 CPU 자원이 넘어감

 

 

프로세스 관련 API

프로세스 API는 보통 다음과 같은 기능을 제공함

 

Create: 프로그램 수행을 위한 프로세스의 생성

Destroy: 버그로 인해 비정상적으로 루프에 빠진 프로세스 등의 제거 

Wait: 프로세스의 실행 중지

Miscellaneous Control: 프로세스를 위한 잡다한 컨트롤

Status: 프로세스의 상태를 얻음

 

 

프로세스 생성의 단계

1. 프로그램이 메모리에 로드됨 (이 때 필요한 것들이 다 로드되지 않고, 이후에  필요할 때에 lazy하게 로딩됨)

2. 프로그램의 런타임 스택이 할당됨

3. 힙이 생성됨

4. OS가 남은 초기화 작업들을 함

5. main()을 실행시켜 프로그램을 시작

프로그램이 메로리로 로드되는 모습

 

프로세스의 상태 변화

 

프로세스를 위한 OS의 자료구조

Process list: 프로세스들을 ready, running, blocked 상태별로 리스트의 형태로 가지고 있음

Register context: 수행중인 레지스터 값 저장

PCB(Process Control Block): 각 프로세스들의 CPU register, PID, CPU 스케쥴링 정보... 등을 저장하고 있음. 

 

 

Context Switch

CPU가 A프로세스를 수행하다가 시간 만료 등의 이유로 B프로세스를 수행하면

A프로세스의 상태(PCB)를 저장하고, B프로세스의 저장된 상태 정보(PBC)를 로드해와야 함

-> overhead(오버헤드). 유용하게 사용되지 않는 시간.

 

 

 

 

프로세스 API

프로세스와 관련된 OS가 제공해주는 함수를 Process API라고 함

 

프로세스의 생성 계층

프로세스는 부모 프로세스로부터 생성되어 트리의 계층 구조를 가짐

부모로부터 프로세스가 생성되면서 필요에 따라 부모와 자원을 공유할 수도 있으며, address space 또한 부모의 것을 복사해서 쓸 수 있음

 

프로세스의 종료

1. 프로세스가 마지막 문장을 실행하고, OS에게 종료해달라고 요청하면 자식의 리소스를 OS가 해제해줌. 이 때 부모 프로세스에게 wait 상태를 반환

2. 자식 프로세스가 너무 자원을 낭비하거나, 더 이상 필요하지 않아지면 부모 프로세스가 abort시켜 자식 프로세스를 종료시킬 수 있음

 

시스템 콜에서의 프로세스 생성과 종료

fork()를 하면 parent는 fork()의 반환값으로 child의 pid, child는 0값을 반환받음 (fork()결과의 return이 두 번 일어남) 

 

 

728x90
반응형