seoyoung.dev

2. 프로세스 본문

TIL/운영체제

2. 프로세스

seo-0 2021. 8. 9. 13:47

http://www.kocw.net/home/search/kemView.do?kemId=1046323

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net


* Context 

(1) 프로세스의 cpu 수행상태를 나타내는 하드웨어 문맥

- instruction 을 어디까지 실행했는가 : program counter, 각종 레지스터가 어떤 값을 가지고 있었는지, 

(2) 프로세스 주소공간에 어떤 내용 들어있는지 ( code, data, stack )

(3) 프로세스 관련 커널 자료구조 

- os 가 프로세스 관리하기 위해서 자신의 data 영역에 PCB 저장 ( 커널 주소공간 내 data 영역 )

- kernel stack : system call 등 커널에 요청 시, 커널 주소공간 내 stack 영역에 어떤 프로세스의 요청인지 저장

* 프로세스의 상태 

- Running : instruction 수행중인 상태

- Ready : 메모리 등 다른 조건 모두 만족, cpu 를 기다리는 상태 

- Blocked ( wait / sleep ) : cpu 를 줘도 당장 instruction 을 수행할 수 없는 상태

: 예) event( I/O ) 만족되지 않아 기다리고 있거나, 디스크에서 파일 읽어와야 할 때

 

- Suspended ( stopped ) 

: 외부적인 이유로 프로세스 수행이 정지된 상태 (ex- 중기 스케쥴러)

: 프로세스 통째로 swap out ..메모리로부터

ex) 사용자가 프로그램 일시정지 / 시스템이 프로세스 잠시 중단시킴 

[ Blocked : 자신이 요청한 event가 만족되면 Ready 로 / Suspended : 외부에서 resume해 줘야 Active ]

 

- New : 프로세스 생성 중인 상태

- Terminated : execution 이 끝난 상태 

프로세스 상태도 -suspended 추가 
운영체제가 프로세스 상태 관리 


* PCB ( Process Control Block )

(1) OS 가 관리상 사용하는 정보 - 프로세스 상태 / 프로세스 ID / 우선순위 나 스케쥴링 정보

(2) 프로세스의 context 표현하기 위해 program counter 나 레지스터 값

(3) 메모리 관련 code, data, stack 의 위치 정보

(4) 프로세스가 사용하고 있는 file 들에 대해 descriptor들

* Context Switch

: CPU 를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

: 내어주는 프로세스 상태를 그 프로세스의 PCB 에 저장 ( CPU 의 레지스터에 저장되있던 값이나 PC 값..)

: 새롭게 CPU 를 얻는 프로세스의 PCB 로부터 값들 얻어서 CPU 에 사용

>> System call 이나 interrupt 발생 시, 반드시 context switch 가 일어나는 것은 아니다.

: cpu 제어권이 사용자 프로세스 -> 운영체제로 넘어가는 것 : context switch(x)
: 다시 원래 프로세스로 cpu 돌아가면 이것 역시 context switch 가 아님
-> 커널 모드로 들어왔다가, 다시 user mode 로 복귀 
-> 이것도 pcb 에 context 를 save 해야 하긴 하지만, context switch 하는 경우 더 부담이 커진다. 
ex) cache-memory-flush

: 위 경우 발생한 후, 운영체제가 다른 프로세스에 cpu 제어권 넘겨주면 context switch 맞음

* 프로세스 스케쥴링 큐 

- Job Queue ( 현재 시스템 내 있는 모든 프로세스의 집합 )

- Ready Queue

- Device Queue

* 스케쥴러 

- job scheduler ( 장기 스케쥴러 )

: 프로세스에 메모리 주는 문제 .. ready 상태 될 때, 메모리에 올라가도록 admitted 결정 

: 메모리에 올라가있는 프로세스의 수 제어 (degree of Multiprogramming )

: 보통의 time-sharing system 에는 프로그램 시작 되면 곧바로 ready..장기 스케쥴러 없음

- cpu scheduler ( 단기 스케쥴러 )

: 어떤 프로세스 running 시킬 지 결정 

- swapper( 중기 스케쥴러 )

: 메모리에 너무 많은 프로그램 올라가 있으면, 일부 프로그램 통째로 쫓아냄

: 프로세스에게서 메모리 뺏는 문제 (degree of Multiprogramming  제어)


* Thread

: 프로세스 내 cpu 수행 단위 

: 프로세스 1 개에 PC 여러개 - 쓰레드 별로 수행하고 있는 코드부분 다르게 가리킴

: 메모리 주소공간 공유, 프로세스 상태,, 각종 자원들도 쓰레드 간 공유 (=task)

: 별도로 가지고 있는 것은 CPU 수행과 관련된..Program Counter / Register / Stack

쓰레드 

[ 쓰레드 사용의 장점 ]

(1) 응답성

: 하나의 스레드가 blocked 상태인 동안에도, 동일 task 내의 다른 스레드 실행되어, 빠른 응답시간 제공 

ex) 웹 서버에서 브라우저 하나 요청 - 하나의 쓰레드가 이미지 같은거 i/o->blocked / 다른 쓰레드는 계속 display 

 

(2) 자원 공유

: 동일한 일을 수행하는 다중 스레드 - 자원 절약..(별도로 메모리에 올려놓지 않아도 되니까)

 

(3) 경제적

: 프로세스 하나 추가하는 것보다 쓰레드 하나 생성하는 것의 오버헤드가 훨씬 적음

: 프로세스 간 context switch 도 오버헤드가 큼 -> 쓰레드 간 switch 가 훨씬 간단

 

(4) cpu 여러개 있는 경우(MP Architecture) 병렬성 증가

 

( user-level 쓰레드 : 라이브러리 기반, 사용자 수준에서 쓰레드 구현 )

 

'TIL > 운영체제' 카테고리의 다른 글

4.CPU Scheduling  (0) 2021.09.27
3.Process Management  (0) 2021.08.10