일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- 8-queen
- 리스트
- 파이썬
- boj 11053
- 냅색
- 평범한 배낭
- BOJ 2606
- 증가하는 부분수열 2
- 미로탐색
- python
- list
- 백준 2606
- 백준
- 소수찾기
- BFS
- 알고리즘
- 타겟 넘버
- 데카르트 곱
- 백준 1535
- 2606
- 12865
- 9663
- 가장 긴 증가하는 부분수열
- dfs
- LCS2
- 대소비교
- 백준 9252
- 백준_2178
- 백준 12015
- Today
- Total
Devlog_by_0giru
[운영체제] 프로세스 본문
- 프로세스란?
실행 중인 프로그램, 혹은 현대의 시분할 시스템에서 운영체제 작업의 단위를 말한다.
프로그램을 컴파일하여 메모리상에 적재되면, 이를 프로세스라고 한다.
- 프로세스의 메모리상에서의 표현
프로세스는 메모리 상에서 다음과 같은 속성을 포함하여 표현된다.
- Text section - 프로그램의 실행 코드
- Data section - 전역 변수
- Heap section - 프로그램 런타임 때 동적으로 할당되는 메모리 공간
- Stack section - 프로그램 함수 호출 시 임시로 할당되는 메모리 공간 (함수 인자, 반환 주소, 지역 변수 등)
- 프로세스의 5가지 상태
프로세스는 New, Running, Waiting, Ready, Terminated의 총 5가지 상태를 가진다.
- New : 프로세스가 막 생성된 단계
- Running : 프로세스가 CPU(프로세서)를 점유하여 프로세스의 명령어들이 실행되는 단계
- Waiting : 프로세스가 어떤 사건이 일어나기를 기다리는 상태 (ex. I/O)
- Ready : 프로세스가 프로세서를 점유하기를 기다리는 상태
- Terminated : 프로세스의 처리가 끝난 상태
- Process Control Block(PCB)
TCB(Task Control Block)이라고도 한다. 구조체 형태로 프로세스가 가지는 정보를 나타낸 것을 말하는데 아래와 같은 정보들을 가지고 있다. OS는 이런 PCB들을 관리한다.
- Program State
- Program Counter
- CPU Registers
- CPU scheduling information
- Memory management information
- Accounting information
- I/O status information
- 멀티 프로그래밍
멀티 프로그래밍 : 여러 프로그램들을 동시에 실행시키는 것
멀티 프로그래밍의 목적 : CPU(프로세서)의 사용을 극대화 하기 위해
멀티 프로그래밍 방법 : Time Sharing을 이용해 여러 프로그램을 돌아가며 실행해 유저가 프로그램과 상호작용 할 수 있게 함. Time Sharing을 하려면 어떤 순서로 프로그램을 실행할 것인지 Scheduling 하는 작업이 필요하다.
프로세스들이 Ready 큐에 순서대로 대기하면서 CPU를 점유. CPU 점유가 끝난 프로세스는 다시 Ready 큐로 복귀한다.
CPU를 점유하다 특정 사건에 Wait이 필요한 프로세스는 Wait 큐로 들어간다. 이후 일련의 과정 후 다시 Ready 큐로 복귀한다.
- Context Switch (문맥 교환)
Context란 프로세스가 사용되고 있는 상태를 의미한다. PCB정보들을 Context라고 생각하자.
프로세스가 프로세서를 점유하다가 인터럽드 등이 발생하면,
- 현재까지의 실행했던 프로세스에 대한 정보를 저장한다.
- 이후에, 다시 해당 프로세스의 차례가 되면 저장했던 정보를 활용하여 중단 부분부터 프로세스를 실행을 재개한다.
- 부모 프로세스와 자식 프로세스
프로세스는 fork()를 이용해 여러 개의 자식 프로세스를 생산할 수 있다. 새로운 프로세스를 생산한 프로세스를 부모 프로세스라 하고, 새롭게 생산된 프로세스를 자식 프로세스라고 한다.
프로세스들은 고유 ID인 pid를 가지며 자식 프로세스와 부모 프로세스도 마찬가지로 pid로 구분하고 pid값은 통상적으로 정수로 표현한다.
부모 프로세스는 fork() 함수의 리턴 값으로 자식 프로세스의 pid를 반환받고, 자식 프로세스는 fork() 함수의 리턴 값으로 0을 반환 받는다.
부모 프로세스와 자식 프로세스는 두 가지의 상태 관계를 가질 수 있다.
- 부모 프로세스와 자식 프로세스가 동시에 진행되는 상태
- 자식 프로세스가 종료될 때 까지 부모 프로세스는 기다리는 상태
부모 프로세스가 자식 프로세스를 생성하면 메모리 공간에 자식 프로세스의 메모리 주소가 생성되는데, 자식 프로세스와 부모 프로세스가 하는 일이 동일할 경우, 메모리 공간을 따로 할당하지 않고 PCB만 따로 생성해 Context만 구분해 메모리를 절약할 수 있다.
- 좀비 프로세스와 고아 프로세스(Zombie Process, Orphan Process)
- 좀비 프로세스 : 자식 프로세스는 종료되었지만 부모 프로세스가 종료 상태를 회수하지 않아 리소스를 차지하고 있는 상태
- 고아 프로세스 : 자식 프로세스가 종료되기 전에 부모 프로세스가 종료된 상태
'[기타]' 카테고리의 다른 글
[운영체제] 스레드 (0) | 2021.05.18 |
---|---|
[운영체제] 프로세스의 통신 (0) | 2021.05.17 |
Mac OS 패키지 관리자 Homebrew 이용해보기 (0) | 2021.03.11 |