티스토리 뷰
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 |