목차
프로세스란?
프로그램과 프로세스
프로세스의 상태
프로세스 제어 블록(PDB)
스레드
01. 프로세스란?
프로그램이 메모리 상태에 올라가 동적인 상태인 것이 프로세스다.
1-1. 프로세스 구조
코드영역, 데이터영역, 스택영역으로 분리된다.
코드영역 | 프로그램 본문 기술. 요리책과 같음. |
데이터영역 | 사용해야 하는 데이터. 요리의 재료와 같음. |
스택영역 | 프로세스를 운영할 때 필요한 데이터. 조리도구와 같음. 예를 들면, 프로세스에서 함수 실행시키면 함수 실행 후 다시 돌아 올 위치 등을 저장함. 이는 사용자에게 보이지 않음. |
1-2. 시분할 방식
시분할 방식이란, CPU가 시간을 쪼개 프로세스에게 각각 할당하여 프로세스를 처리할 수 있는 방법이다.
이는 CPU의 효율을 높이기 위한 방법 중 하나다.
음식점으로 비유하면, 요리사(CPU)가 한 개인 곳에서 손님의 주문 한 개가 들어오면 그 주문 한 개를 한 번에 처리해야 하는 상황을 말한다. 이후에 들어온 손님은 그 테이블 주문이 다 요리가 될 때까지 기다려야 한다.
이는 매우 비효율적이다.
강식당을 보면 알 수 있다.
한 테이블의 주문만 연신 만들면, 다른 테이블에서는 항의가 들어온다 ... 동시에 주문을 처리한다는 느낌이 들지 않기 때문이다.
따라서, 이를 해결하기 위해서 각 테이블 당 주문을 번갈아가며 수행해준다. 그러면, 고객으로 하여금 동시에 처리가 된다고 느낌을 줄 수 있다. 이게 바로 시분할 방식이다.
1-3. 시스템 호출
호출명령 | 설명 | 장점 |
fork() | 프로세스 복제. 이는 PPID와 CPID가 생성됨. 각각의 PID는 다르게 구현됨. |
프로세스 생성 속도 빠름 시스템 자원 관리 효율적 (부모 자식 프로세서가 생기며 부모가 자식 프로세스 종료 후 메모리 정리 처리를 맡아 수행해 효율적임) 추가 작업 없이 자원 상속 가능 |
exec() | 프로세스 전환. 다른 프로세스를 그냥 띄우면 PDB 등을 새로만들어야 하고 메모리 할당 등이 필요하므로, 겉은 두고 안에 있는 내용물만 다른 프로세스로 변경. |
구조체 재활용으로 프로세스 생성 속도 빠름 부모 자식 프로세서 연결은 그대로이므로 시스템 자원 관리 설정 용이 |
1-4. 프로세스 계층 구조
계층 구조란, 프로세스가 부모 자식 계층을 이루고 있는 구조를 말한다.
이는 동시에 여러 작업 처리 및 종료된 프로세스 자원 회수에 용이하다.
동시에 여러 작업 처리 예시
만약 페이지에 다수 사용자 접속 시 로그인 페이지를 fork()하여 다수사용자에게 전달하면 login 프로세스를 다수가 쓸 수 있고 이는 동시처리로 간주한다.
여기서 잠깐! 고아 프로세스란?
부모 프로세스가 먼저 종료된 경우.
여기서 잠깐! 좀비 프로세스란?
자식 프로세스가 종료됐는데, 부모 프로세스가 메모리 정리 등을 하지 않아 남아있는 경우. 이 때문에 컴퓨터 장기간 켜놓을 때 느려질 수 있다.
02. 프로그램과 프로세스
앞서, 프로그램이 메모리에 올라간 상태가 프로세스라고 했다. 정확하게 말하면, 프로세스와 프로그램은 아래와 같은 관계를 갖는다.
프로세스 = 프로그램 + 프로그램 제어블록 (PCB)
왜냐하면, 프로그램이 메모리에 올라가면서 PCB가 생성되기 때문이다.
PCB의 자세한 설명은 아래에서 설명할 것이다.
03. 프로세스의 상태
프로세스는 아래와 같은 상태 그래프를 띤다.
여기서는 활성상태와 비활성상태로 구분된다.
3-1. 활성상태
생성 / 준비 / 대기 / 실행 / 완료
상태 | 설명 | 작업 |
생성 상태 | 프로그램을 메모리에 가져와 실행 준비가 완료된 상태 | 메모리 할당, PCB 생성 |
준비 상태 | 모든 프로세스가 자기 차례 기다리는 상태. CPU가 프로세스를 선택 |
dispatch(PID) 준비 -> 실행 |
실행 상태 | 선택된 프로세스가 타임 슬라이스 얻어 CPU 실행하는 상태. 프로세스 사이 ※문맥 교환 발생 |
timeout(PID) 실행 -> 준비 exit(PID) 실행 -> 완료 block(PID) 실행 -> 대기 |
대기 상태 | 실행 중인 프로세스가 입출력을 요청하면 입출력 완료될 때까지 기다리는 상태. | wakeup(PID) 대기 -> 준비 |
완료 상태 | 프로세스 종료된 상태. 모든 데이터 및 메모리 정리. exit()으로 정상적으로 처리하며, 비정상적 강제 종료는 ※코어 덤프. |
메모리 삭제, PCB 삭제 |
※ 문맥 교환 : 두 프로세스의 제어 블록 및 이와 관련된 값을 교환하는 작업
※ 코어 덤프 : 디버깅 하기 위해 강제 종료 직전의 메모리 상태를 저장장치로 옮기는 것
3-2. 비활성상태
휴식 / 보류
- 휴식상태 : 일시적으로 쉬고 있는 상태. 프로세스 상태가 정지로 되어 있음. PCB도 유지되어 있음. 이는 메모리에 저장되어 있지만 멈춘 상태.
- 보류상태: 메모리 꽉 찼거나 프로그램 오류 있을 경우, 입출력 입력 오래동안 되지 않을 경우 메모리에서 잠시 쫓겨나 있는 상태. 이는 메모리 밖 스왑 영역에서 저장되어 있으며 멈춘 상태.
04. 프로세스 제어 블록(PCB)
프로세스 제어 블록이란, 프로세스를 실행하는 데 필요한 중요 정보를 보관하는 자료 구조를 말한다.
이는 T(Task)CB라고도 하며 고유하다. 또한 프로세스 생성 시 생성되어 완료 시 폐기된다는 특징이 있다.
4-1. 프로세스 제어 블록의 구조
포인터 | 준비상태 & 대기상태 큐 구현 예를 들어 대기상태에서 입출력 결과가 같은 곳끼리 묶어 빠르게 처리하기 위한 라벨과 같다. |
프로세스 상태 | 현재 프로세스가 어떤 상태인지 표현 |
프로세스 구분자(본인PID, 부모PPID, 자식CPID) | 고유의 구분을 할 수 있도록 함 |
프로그램 카운터 | 이후 어떤 명령어를 수행할지 위치가 저장됨 |
프로세스 우선순위 | 예를 들어 사용자 프로세스보다 중요도가 큰 커널 프로세스는 우선순위가 높을 수 있는데, 이에 대한 정보가 저장되어 있음. 우선순위가 높을수록 더 먼저, 자주 실행된다. |
레지스터, 메모리, 할당자원, 계정 등 정보 | 각 프로세스가 갖고 있어야 할 정보가 저장된다. |
05. 스레드
스레드란, CPU에 작업 요청을 하는 실행 단위를 말한다.
일반적으로 작은 단위의 오퍼레이션이 모여 하나의 태스크가 된다.
여기서 오퍼레이션은 스레드, 태스크는 프로세스다.
주문서를 예시로 들어보았다. 여기서 각각의 요리는 프로세스, 그 내부 오퍼레이션은 스레드다.
즉 프로세스 간 연결은 약하지만 스레드 간 연결은 매우 강하다는 특징이 있다. 또한 스레드는 스레드 간 통신을 하며 소통한다.
스레드 관련 용어를 정리하면 아래와 같다.
용어 | 설명 |
멀티스레드 | 프로세스 내 작업을 여러 개 스레드로 나눈 것 |
멀티태스킹 | CPU에 작업을 줄 때 각 프로세스마다 타임 슬라이스로 배분하는 시분할 방식 |
멀티프로세싱 | 여러 개의 CPU 혹은 한 개 CPU 내 여러 개 코어에 여러 개 스레드 배정해 동시 작동하는 방식 |
CPU 멀티스레드 | CPU 내에서 동시에 여러 스레드 처리하도록 만든 병렬 처리 기법 |
5-1. 멀티 스레드의 장점
1. 작업 요구에 빠른 응답이 가능하다.
예를 들면, 동영상 틀기를 멀티스레드화 하면 입출력이 다 로드되지 않아도 중단이 돼도 재생이 가능하다.
2. 스레드 간 자원 공유해 자원 중복을 막아 원활하며 효율적이다.
3. 다중 CPU가 지원돼 다중 CPU가 멀티스레드를 동시에 처리하면 처리 시간이 더 단축된다.
5-2. 멀티 스레드의 단점
한 스레드 문제 생기면 전체 스레드 영향 끼친다.
예를 들어, 하나의 인터넷 익스플로러에서 문제 생기면 전체 인터넷 익스플로러가 종료된다.인터넷 익스플로러 프로세스는 하나고 그 안에 여러 개 페이지 스레드가 사용되는데, 스레드 하나 종료되면 프로세스 전체가 종료된다.
'컴퓨터 사이언스 (CS) > 운영체제' 카테고리의 다른 글
06. [쉽배운 2장] 컴퓨터의 구조와 성능 향상 (0) | 2021.07.02 |
---|---|
05. [쉽배운 1장] 운영체제의 개요 (0) | 2021.06.08 |
04. 프로세스 문제풀이 (0) | 2021.06.02 |
03. 프로세스의 이해 (0) | 2021.06.01 |
02. 운영체제의 개념과 구조 (0) | 2021.05.31 |