[프로세스]
프로세스 : 지금 실행중인 프로그램
프로세스의 문맥 (context)가 매우 중요하다.
프로세스의 중간을 끊어서 봐도 어떤 과정 중인지 왜 이런 과정 중인지를 이해할 수 있으려면 문맥이 중요하다.
프로그램이 카운터가 어디를 가리키고 있는가 (프로그램이 어디까지 실행 됬는가)
프로세스의 메모리에 뭐가 저장되어 있는가
프로세스의 상태를 나타내는 모든 요소를 문맥이라고 한다.
하드웨어 문맥
프로세스의 주소 공간
: 메모리에 관련
프로세스 관련 커널 자료구조
: PCB 운영체제가 이 프로세스에 대해 어떤 값을 가지고 이쓴ㄴ지
: Kernel stack :
프로세스 혼자 실행되지 않기 때문에 (프로세스가 번갈아가며 실행되기 때문에)
프로세스의 현재 상태를 저장해놓지 않으면(문맥을 모르면) 다시 해당 프로세스의 차례가 돌아왔을 때 프로세스를 처음부터 실행해야 할 것이다.
# 프로세스의 상태 process state (CPU는 한 개 라고 가정)
+ Running : CPU를 잡고 instruction을 수행중인 상태
+ Ready : CPU를 기다리는 상태 (메모리와 같은 다른 조건은 모두 만족)
+ Blocked (wait, sleep) :
: CPU를 주어도 당장 instruction을 수행할 수 없는 상태
: 프로세스 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태 (ㄷ스크에서 file을 기다리는 상태)
---이렇게 크게 세가지로 나눌 수 있다.---
+ NEW: 프로세스가 생성 중인 상태
+ Terminated : 수행(execution)이 끝난 상태 , 종료중인 상태
+ 프로세스의 상태
연두색은 프로세스를 나타냄
CPU는 매우 빠르고 여럿이서 공유하는 자원
하나의 프로세스가 cPU안에서 running 하다가 timer가 끝나면 interrupt되어 ready queue의 가장 끝으로 가 대기한다.
프로세스가 CPU에서 running하다가 I/O device가 필요하면 DISK I/O의 queue에 가서 대기(줄서기)(프로세스 -> blocked) 그럼 controller의 지휘하에 순서대로 작업 실행
IO의 작업이 끝나interrupt가 오면 그뒤로는 위엣 ㅓ기술한 프로세스 순서와 같음
공유 데이터에 여러 프로세스가 접근하면 역시 queue에 대기하여 차례대로 사용한다.(프로세스 -> blocked)
>> Queue는 커널의 data 영역에 자료구조로 queue를 만들어 놓고 운영
+ 프로세스 상태도
+ Process Control Block (PCB)
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
다음의 구성 요소를 가진다 (구조체로 유지)
• (1) OS가 관리상 사용하는 정보
– Process state, Process ID
– scheduling information, priority
• (2) CPU 수행 관련 하드웨어 값
– Program counter, registers
• (3) 메모리 관련
– Code, data, stack의 위치 정보
• (4) 파일 관련
– Open file descriptors…
+ 문맥 교환 (Context Switch)
- CPU 제어권을 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
- System call이나 Interrupt 발생 시 반드시 context switch가 일어나는 것은 아님
(1)
(2)
(1)의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 save해야 하지만
문맥교환을 하는 (2)의 경우 그 부담이 훨씬 큼 (eg. cache memory flush)
+ 스케줄러 (Scheduler)
- Long-term scheduler (장기 스케줄러 or job scheduler)
시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
프로세스에 memory(및 각종 자원)을 주는 문제
degree of Multiprogramming을 제어
time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)
- Short-term scheduler (단기 스케줄러 or CPU scheduler)
어떤 프로세스를 다음번에 running시킬지 결정
프로세스에 CPU를 주는 문제
충분히 빨라야 함 (millisecond 단위)
- Medium-Term Scheduler (중기 스케줄러 or Swapper)
여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
프로세스에게서 memory를 뺏는 문제
degree of Multiprogramming을 제어
+ 프로세스의 상태 (Process State)
Running
• CPU를 잡고 instruction을 수행중인 상태
Ready
• CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
Blocked (wait, sleep)_오랜작업 중
• I/O 등의 event를 (스스로) 기다리는 상태
• (예) 디스크에서 file을 읽어와야 하는 경우
Suspended (stopped)_의도하지 않게 메모리를 아예 뺏겨 강제로 정지된 상태
• 외부적인 이유로 프로세스의 수행이 정지된 상태
• 프로세스는 통째로 디스크에 swap out 된다
• (예) 사용자가 프로그램을 일시 정지시킨 경우 (break key)
시스템이 여러 이유로 프로세스를 잠시 중단시킴
(메모리에 너무 많은 프로세스가 올라와 있을 때)
Blocked: 자신이 요청한 event가 만족되면 Ready
Suspended: 외부에서 resume해 주어야 Active
'about COMPUTER > 컴퓨터 시스템' 카테고리의 다른 글
# 10. CPU 스케줄링 (0) | 2020.11.05 |
---|---|
# 09. 프로세스 관리 (0) | 2020.10.20 |
# 07. 하드웨어와 운영체제(2) / 메모리 관리 (0) | 2020.10.15 |
# 06. 하드웨어와 운영체제(1) / 컴퓨터 시스템 구조 (0) | 2020.10.15 |
# 05. 운영체제 OS (0) | 2020.10.15 |
댓글