1. 프로세스
프로세스란?
- 실행중인 프로그램
- 프로그램: 동작을 하지 않는 정적, 수동적 개체
- 프로세스: 동작을 하는 능동적 개체
운영체제로부터 자원을 할당 받아 동작한다.
- 자원: CPU, 메모리, 입출력장치, 파일 등
- 동작: CPU가 프로세스의 명령을 실행
운영체제(프로세스 관리자)가 처리하는 작업
- 프로세스를 생성 및 종료
- 프로세스를 실행시키기 위한 스케줄링 작업
- 프로세스의 상태 관리
프로세스의 구성
- 메모리 구조
- 프로세스 제어 블록
메모리 구조
- 프로그램 실행에 직접 필요한 코드와 데이터
코드 영역: 프로그램 자체
데이터 영역: 프로그램 실행시 필요한 데이터 -> 상수나 변수의 값(static), 서브 프로그램의 호출 상태 등
프로세스 제어블록 (Process Control Block, PCB)
- 운영체제가 프로세스를 관리하기 위해 필요한 정보
- 각 프로세스마다 존재
- 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용
프로세스 상태
- 생성: 처음 작업이 시스템에 주어진 상태
- 준비: 실행 준비가 되어 CPU 할당을 기다리는 상태
- 실행: 프로세스가 처리되는 상태
- 종료: 프로세스가 더 이상 실행되지 않도록 끝난 상태
- 대기: 프로세스가 I/O 작업이 끝날 때까지 또는 특정 자원을 할당받을 때까지 보류되는 상태
프로세스 상태 변화
프로세스 생성 방법
- 사용자가 프로그램을 직접 실행
- 한 프로세스가 다른 프로세스를 생성
-> 프로세스 생성 시스템 호출 이용
-> 부모 프로세스: 시스템 호출을 하는 프로세스
-> 자식 프로세스: 시스템 호출을 통해 새로 생성된 프로세스
Unix, Linux에서 프로세스 호출
- fork()
-> 부모 프로세스를 복제시켜 자식 프로세스를 만들어냄
-> 자식 프로세스는 부모 프로세스의 복제본
// fork()를 호출하여 자식 프로세스 생성
pid = fork();
기존에 PID = 10 이면
fork() 후에는 자식 프로세스는 부모를 복제해올 뿐임. 전부 똑같이 가져오지만
단, PID는 다르게 생성.
자식의 PID = 25
- exec()
자식 프로세스는 부모 프로세스와는 다른 새로운 프로그램 실행
prg2라는 새로운 프로그램에 맞춰서 바뀜
단 PID는 바뀌지 않음
Windows의 명령어
- CreateProcess()
-> 자식 프로세스는 새로운 프로그램 생성
-> 처음부터 새로운 프로그램
prg2와 pid를 인자로 받아와서 처음부터 내용이 prg2에 관한 내용으로 만들어지며, PID만 부모와 다른 id로 만들어짐
프로세스 종료 방법
- 프로세스가 모든 처리를 완료 => 정상적 종료
- 부모 프로세스에 의해 자식 프로세스가 강제 종료
-> 프로세스 종료 시스템 호출 이용
-> 자식 프로세스 생성시 얻은 PID를 이용
- 부모 프로세스가 종료되는 경우 운영체제가 자식 프로세스를 종료
2. 쓰레드
전통적인 프로세스
- 하나의 프로그램을 실행하기 위한 기본적인 단위
- 자원 소유의 단위: 하나의 메모리 구조
- 디스패칭의 단위: 하나의 제어 흐름
- 프로세스 내에서 다중 처리가 불가능
쓰레드
- 프로세스 내에서의 다중 처리를 위해 제안된 개념
- 하나의 프로그램을 실행하기 위한 기본적인 단위
- 디스패칭 단위 - 자원 소유의 단위: 프로세스
- 하나의 프로세스 내에는 하나 이상의 쓰레드가 존재
쓰레드는 실행에 필요한 최소한의 정보만 가짐
- PC를 포함한 레지스터 값
- 상태 정보
- 스택 영역
나머지 정보는 프로세스에 두고 다른 쓰레드와 공유
멀티 CPU 또는 멀티코어 컴퓨터 시스템
-> 다중 쓰레드를 병렬로 처리 가능
처리 속도 별로 쓰레드가 나눠진 경우
-> 효율적인 처리 가능
참고자료: 운영체제(김진욱, 이인복 공저, KNOU press 출판)
'CS > 운영체제' 카테고리의 다른 글
교착상태, 교착상태 특성, 교착상태 예방, 상호배제, 점유대기, 비선점, 환형대기 (0) | 2023.06.15 |
---|---|
병행 프로세스의 여러가지 문제들, 생산자-소비자, 판독기-기록기, 자바 구현 코드, 프로세스 간 통신 (0) | 2023.06.15 |
운영체제의 병행 프로세스, 병행성 문제, 세마포어, 상호배제와 동기화 해결 세마포어 자바 구현 코드 (0) | 2023.06.15 |
프로세스 스케줄링, 운영체제 스케줄링 알고리즘 (0) | 2023.06.15 |
운영체제, 구성, 유형 (0) | 2023.06.14 |