일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- sql
- 카카오
- Level2
- Doitvue.js입문
- 배열
- OS
- Level1
- typescript
- 코테연습
- 프로그래밍
- web
- 고득점Kit
- 리트코드
- 프로그래머스
- 동적계획법
- Medium
- 리액트
- 파이썬
- dp
- react
- python
- javascript
- 백준
- CS
- C++
- 자바스크립트
- VUE
- Level3
- LeetCode
- 웹프로그래밍
- Today
- Total
[운영체제] 프로세스 본문
프로세스
프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다. 운영체제로 부터 주소공간, 파일, 메모리 등을 할당 받으며 이것을 총칭하여 프로세스라고 한다. job = task = process
프로세스는 다음을 포함한다.
- 스택 (stack): 함수의 매개변수, 로컬 변수와 같은 임시 자료
- 스택의 할당과 할당 해제는 런타임에 일어나지만 스택의 각 프레임은 컴파일 타임에 결정된다.
- 힙 (heap) : 프로세스 실행 중에 동적으로 할당되는 메모리
- 데이터 (data): 전역 변수들을 저장
- 코드(Code) : 코드 자체를 구성하는 메모리 영역
Execution Sequence and Stack
실행 순서를 제어하기 위해 흔히 스택을 사용한다.
call stack
프로그램의 서브루틴 정보를 저장하는 스택 데이터 구조이다. OS에서는 그냥 스택이라고 부른다.
CPU가 call을 실행하면 call을 위한 정보들의 집합을 stack에 저장한다.
- return address
- return parameter
- Parameters
stack pointer를 가지고 현재 스택의 top을 가리킨다.스택은 frame으로 이루어져 있는데 frame의 크기는 가변이기 때문에 이전 frame의 주소를 가리키는 current frame pointer도 사용한다.
Context
CPU가 해당 프로세스를 실행하기 위해 필요한 정보들을 컨텍스트라고 한다.
Sytem-level Context
OS가 프로세스를 관리하기 위해 필요한 정보를 포함한다.
- PCB
- Process identification
- Process state information
- Process control information
User-level Context
프로세스가 실행되는 동안 CPU는 스택을 사용한다.
사용자 프로그램의 기본적인 요소 text와 data 영역을 포함한다.
- User text
- User data
- User stack
Hardware Context
레지스터들
PC, SP, PSW ... 범용 목적 레지스터들
Process Context
PCB (Process Control Block)
PCB는 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조이다. 운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 생성한다.
프로세스는 CPU를 할당 받아 작업을 처리하다가도 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU를 반환해야한다. 이 때 작업의 진행 상황을 모두 PCB에 저장하게 된다. 그리고 다시 CPU를 할당 받게 되면 PCB에 저장되어 있던 정보를 불러와 이전에 종료되었던 시점부터 다시 작업을 수행한다.
PCB는 Process Image에 포함되어 있는데, Process Image란 CPU가 프로세스를 컨트롤 하기 위해 각 프로세스에 대한 정보를 저장해놓은 것이다. User level의 context와 system level의 context가 합쳐진 것으로 User Data, User Program, Stack, PCB를 포함한다.
PCB에 저장되는 정보
- PID: 프로세스 식별번호
- 프로세스 상태
- 프로세스 컨트롤을 위한 정보
- 프로그램 카운터: 프로세스가 다음에 실행할 명령어의 주소
- CPU 레지스터
- CPU 스케줄링 정보: 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
- 메모리 관리 정보: 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보 포함
- 입출력 상태 정보: 프로세스에 할당된 입출력 장치들과 열린 파일 목록
- 계정 정보: CPU 사용 시간, 실제 사용 시간, 한정된 시간
프로세스 상태
Dispatcher는 새롭게 선택된 프로세스로 CPU 점유를 바꾸는 커널 코드로서 프로세스 수행 중 time out(Preemption) 이나 I/O request(Non-preemption)가 일어나 프로세스가 종료될 경우 다른 프로세스로 스위칭해준다.
Five-state Process Model
- ready: CPU 할당을 기다리는 상태이다. 프로세스는 대기큐에서 실행을 준비하고 있다.
- blocked (wait): 프로세스에 I/O 이벤트가 발생하면 현재 실행 중인 프로세스가 중단되고 해당 이벤트가 종료될 때까지 대기하는 상태이다.
- running: CPU를 할당 받아 실행되는 상태이다. 프로세스의 수행이 완료되기 전에 time out이 발생하면 프로세스는 준비 상태로 전이된다.
- exit
Seven-State Process Model
Suspend process는 메인 메모리에서 디스크로 프로세스를 옮기는 모든 부분을 포함한다. 만약 메인 메모리에 ready 상태의 프로세스가 없으면 OS는 block된 프로세스들을 디스크에서 꺼내 suspend queue에 넣는다.
blocked/suspend는 보조기억장치에서 이벤트를 기다리는 상태이다.
ready/suspend는 blocked state가 없거나 원 순위가 높을 때 생기는 상태로 보조기억장치에 있지만 메인 메모리에 적재되면 바로 실행 가능하다. OS가 수행 중에 갑자기 메모리가 부족하다면 running 상태에서 ready/suspend 상태로 넘어갈 수 있다.
Process List structure
running, ready, block 상태의 pcb들을 관리하기 위한 리스트이다. red-black tree로 관리할 수 있다.
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 스케줄러 (0) | 2022.04.18 |
---|---|
[운영체제] 스레드, 프로세스 vs 스레드 (0) | 2022.04.18 |
[운영체제] 운영체제 (0) | 2022.04.17 |
[운영체제] 캐시 Cache (0) | 2022.04.17 |
[운영체제] 가상메모리 (0) | 2022.04.14 |