티스토리 뷰

Study/OS

Chapter 03 프로세스와 스레드

JJIINDOL 2023. 4. 13. 22:41

1. 프로세스의 개요

 

1) 프로세스의 개념

- 프로그램은 저장장치에 저장된 정적인 상태이고, 프로세스는 실행을 위해 메모리에 올라온 동적 상태이다. 즉, 프로그램이 실행되면 프로세스가 된다.

- 시분할 방식: CPU가 시간을 쪼개어 여러 프로세스에 적당히 배분함으로써 프로세스가 동시에 실행되는 것처럼 느껴진다.

 

2) 프로그램에서 프로세스로의 전환

- 프로세스 제어 블록: 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조

- 어떤 프로그램이 운영체제로부터 PCB를 받으면 프로세스가 된다.

- PCB에 있는 다양한 정보: 프로세스 구분자, 메모리 관련 정보, 각종 중간값

- 프로세스가 종료된다는 것은 해당 프로세스 제어 블록이 폐기된다는 뜻

 

 

 

3) 프로세스의 상태

- 일괄 작업 시스템의 프로세스 상태: 생성, 실행, 완료

- 시분할 시스템의 프로세스 상태: 생성, 준비, 실행, 완료

> 생성: 프로세스가 메모리에 올라와 실행 준비를 완료한 상태. PCB가 생성

> 준비: 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태. CPU가 하나인 컴퓨터에서는 한 번에 하나의 프로세스만 실행 가능하고 CPU 스케줄러에 의해 관리된다.

> 실행: 준비 상태의 프로세스 중 하나가 CPU를 할당받아 실제 작업을 수행하는 상태, 타임 슬라이스 동안만 작업 가능

> 완료: 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 완료 상태로 진입. PCB가 사라진 상태

 

- CPU 스케줄러: 준비 상태의 프로세스 중 다음에 실행할 프로세스를 선정하는 일

- 디스패치: 준비 상태의 프로세스 중 하나를 골라 실행 상태로 바꾸는 CPU 스케줄러의 작업

- 타임 슬라이스: 프로세스에 배당된 작업 시간, 하나의 타임 슬라이스 동안 작업을 못 끝내면 다시 준비 상태가 된다.

- 대기 상태: 입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태

- 대기 상태에서 입출력이 끝난 프로세스는 실행 상태가 아닌 준비 상태로 돌아가 자기 차례를 기다린다.

- 스왑 영역: 메모리에서 쫓겨난 데이터가 임시로 보관되는 곳


 

2. 프로세스 제어 블록과 문맥 교환

 

1) PCB

- PCB: 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료구조

- 포인터: 준비, 대기상태는 큐로 운영되는데, PCB를 연결하여 큐를 구현할 때 포인터가 사용된다.

- PPID와 CPID: 부모, 자식 프로세스를 가리키는 정보가 저장된다.

- 프로세스 우선순위: 다양한 우선순위의 프로세스가 대기 상태로 들어오기 때문에 대기 상태의 큐도 우선순위별로 따로 운영된다.

 

2) 문맥 교환

- CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업

- PCB의 내용이 변경된다. 실행 상태에서 나가면 작업내용을 저장하고, 들어오는 PCB의 내용으로 CPU가 다시 세팅된다.

- 타임슬라이스가 너무 크면 작업이 끊겨 보이고, 너무 작으면 시스템의 성능이 떨어져 적당한 크기로 설정해야 한다. (타임 슬라이스 크기 선정의 기준이 됨)


3. 프로세스의 연산

 

1) 프로세스의 구조

- 코드 영역: 프로그램의 본문이 기술된 곳, 읽기 전용으로 처리

- 데이터 영역: 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳

- 스택 영역: 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳

 

2) 프로세스의 생성과 복사

- 프로세스를 복사하여 새로운 프로세스를 생성

✨ fork() 시스템 호출

 - 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수로 커널에서 제공, 처음 프로그램을 실행하는 속도보다 훨씬 빠르다.

 - 기존 프로세스는 부모, 새로 생긴 프로세스는 자식 프로세스가 되어 부모-자식 관계로 연결된다.

 - PCB의 내용 중, PID, PPID, CPID와 메모리 관련 정보가 바뀐다. 복사된 프로세스는 자식 프로세스가 없으므로 구분자 값이 -1이다.

 

 

3) 프로세스의 전환

 ✨ exec() 시스템 호출

 - 기존 프로세스를 새로운 프로세스로 전환하는 함수

 - fork()는 새로운 프로세스를 복사하는 시스템 호출, exec()는 프로세스는 그대로 둔 채 내용만 바꾸는 호출.

 - 코드 영역에 있는 기존 내용은 지워지고 새로운 코드로 바뀐다. 또한 데이터 영역이 새로운 변수로 채워지고 스택 영역이 리셋된다.

 - PID, PPID, CPID는 변하지 않는다.

 

 

4) 프로세스 계층 구조

- init 프로세스의 자식으로는 login, shell 프로세스 등이 있다.

 

- login 프로세스는 한 번에 1명만 처리할 수 있기 때문에 fork()로 login 프로세스를 여러 개 만들어 사용자에게 나눠준다.

 

- 이미 자리를 차지한 login 프로세스를 없애고 shell을 만드는 것은 비효율적이기 때문에 exec() 시스템 호출을 이용한다.

 

- 모든 프로세스를 부모-자식 관계로 만들어 자식 프로세스가 작업을 마쳤을 때 사용하던 자원을 부모 프로세스가 회수하게 한다.

 

- 좀비: 자식 프로세스가 종료되었는데도 부모 프로세스가 뒤처리를 하지 않을 때 발생

 

- 고아: 자식 프로세스가 종료되기 전에 부모 프로세스가 먼저 종료되면 발생


4. 스레드

 

1) 스레드의 개념

- 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위이다. 운영체제 입장의 작업 단위는 프로세스, CPU 입장의 작업 단위는 스레드이다.

- 오늘날의 운영체제는 프로세스를 다양한 스레드로 나눠 여러 개의 코어에 분배함으로써 시스템 효율을 높인다.

- 멀티스레드: 프로세스 내 작업을 여러 개의 스레드로 분할해 작업 부담을 줄이는 프로세스 운영 기법

- 멀티 프로세싱: CPU를 여러 개 사용해 여러 개의 스레드를 동시에 처리하는 작업 환경

 

2) 멀티스레드의 구조와 예

- fork() 시스템은 코드 중복 등의 이유로 낭비 요소가 많다.

- 스레드는 이러한 멀티태스킹의 낭비 요소를 제거하기 위해 사용되는데 데이터 등을 공유하며 여러 개의 일을 하나의 프로세스 내에서 진행한다.

 

3) 멀티스레드의 장단점

- 장점: 응답성 향상, 자원 공유, 효율성 향상, 다중 CPU 지원

- 단점: 인터넷 익스플로러는 멀티스레드, 크롬은 멀티태스킹을 사용한다. 멀티스레드는 한 화면에 문제가 생겨 종료되면 인터넷 익스플로러 전체가 종료되지만, 멀티태스킹을 사용하는 크롬은 각 프로세스가 독립적이기 때문에 한 프로세스의 문제가 다른 프로세스로 전달되지 않는다.

 

 

 

 

 

 

 

 

 

'Study > OS' 카테고리의 다른 글

기말고사 정리2  (1) 2023.06.09
기말고사 정리1  (2) 2023.06.08
Chapter 04 CPU 스케줄링  (0) 2023.04.16
Chapter 02 컴퓨터의 구조와 성능 향상  (0) 2023.04.10
Chapter 01 운영체제의 개요  (0) 2023.04.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/09   »
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
글 보관함