* 쉽게 배우는 운영체제
프로세스
운영체제에서 하나의 작업 단위
프로세스 제어 블록(PCB)
작업지시서, 운영체제 영역에 생성, 프로세스를 실행하는데 필요한 중요한 정보를 보관하는 자료구조
1) 포인터: PCB를 연결하여 준비상태나 대기 상태의 큐를 구현할 때 사용
2) 프로세스 상태: 프로세스가 현재 어느 상태에 있는지 저장
3) 프로세스 구분자: 메모리에는 여러 개의 프로세스가 존재하기 때문에 각 프로세스를 구분하는 구분자
4) 프로세스 우선순위: 각 프로세스의 우선도, 사용자프로세스< 커널 프로세스
5) 각종 레지스터 정보(중간값): 시분할 시스템에서 여러 프로세스가 번갈아가면서 실행되기 때문에 다시 해당 프로세스의 차례가 되었을 때 작업을 계속 진행할 수 있는 위치가 담긴 값
6) 메모리 관련 정보: 실행하려는 프로세스가 메모리 어디에 저장되어 있는지 CPU가 알 수 있음
7) 할당된 자원 정보: 프로세스를 실행하기 위해 사용되는 입출력 자원이나 오픈소스
8) 계정정보: 계정번호, CPU 할당 시간, CPU 사용 시간 등
9) PPID&CPID: 부모 프로세스 구분자와 자식 프로세스 구분자
프로그램=프로세스+프로세스 제어 블록(생성)
프로세스=프로그램-프로세스 제어 블록(삭제)
* 일괄 작업 시스템: 생성 -> 실행 -> 완료
시분할 시스템
1) 생성: 프로세스가 메모리에 올라옴, PCB 생성
2) 준비: 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
3) 실행: 준비 상태의 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태, 일정시간 CPU를 사용할 권리를 가짐, 시간 내 완료하지 못하면 준비 상태로 돌아감
4) 완료: 실행 상태의 프로세스가 시간 내에 작업을 마친 상태
* CPU 스케쥴러: 준비 상태의 프로세스 중 다음에 실행할 프로레스를 선택
* 디스패치: CPU 스케쥴러가 준비 상태의 프로세스 중 하나를 실행 상태로 바꾸는 작업
* 타임 슬라이스, 타임퀀텀: 프로세스에 배정된 작업 시간
* 타임아웃: 프로세스가 주어진 시간 안에 작업을 끝내지 못해서 다시 준비 상태로 돌아감
* 대기상태: 입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태
* 휴식상태:프로세스가 작업을 일시적으로 쉬고 있는 상태
* 보류상태; 프로세스가 메모리에서 쫒겨난 상태, 대부분 컴퓨터의 성능을 떨어트리거나 실행을 미루어도 상관없는 프로세스, 메모리 밖으로 쫒겨나거나 스왑 영역에 보관됨
* 스왑영역: 메모리에서 쫒겨난 데이터가 임시로 보관되고 있는 곳
보류상태 -> 스왑영역, 휴식상태 -> 메모리
문맥교환
CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업, 이 때 두 프로세스 제어 블록의 내용이 변경됨, 타임아웃 시&인터럽트 시
프로세스 구조
1) 코드영역: 프로그램의 본문 기술, 읽기 전용
2) 데이터영역: 코드가 실행하면서 사용하는 변수나 파일 등 각종 데이터 저장, 읽기&쓰기 가능
3) 스택영역: 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳, 숨김영역
fork()
실행중인 프로세스로부터 새로운 프로세스를 복사하는 함수, 부모-자식 관계
변경점: 프로세스 구분자 바뀜, 메로리 관련 정보 바뀜, PPID와 CPID 바뀜
장점: 프로세스 생성 속도 빠름, 추가 작업 없이 자원 상속 가능, 시스템 관리 효율적
exec()
기존의 프로세스를 새로운 프로세스로 전환, 프로세스 구조체 재활용
* 프로세스 계층 구조: 여러작업 동시 처리 가능, 용이한 자원 회수
* 고아 프로세스: 부모 프로세스가 자식 프로세스보다 먼저 죽으면 발생
스레드
프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위, 멀티 태스킹의 낭비 요소 제거를 위해 사용
* 멀티태스킹: 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법
* 멀티프로세싱: CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하느 작업 환경
* CPU 멀티스레드: 한 번에 하나씩 처리해야하는 스레드를 파이프 라인 기법을 이요하여 동시에 여러 스레드를 처리하도록 만든 병렬처리 기법
멀티스레드
프로세스 내 작업을 여러 개의 스레드로 분할함으로써 자업의 부담을 줄이는 프로세스 운영 기법
(+) 응답성 향상, 자원공유, 효율성 향상, 다중 CPU 지원
(-) 한 스레드에 문제가 생기면 전체 프로세스에 영향
1) 커널 스레드
- 커널이 직접 생성하고 관리하는 스레드, 1to1 모델, 독립적인 스케쥴링 가능
(+) 멀티 CPU 사용 가능, 하나의 스레드가 대기 상태에 있어도 작업 가능, 보안에 강하고 안정적
(-) 문맥 교환 시 오버헤드 떄문에 느리게 작동
2) 사용자 스레드
- 라이브러리에 의해 구현된 일반적인 스레드, 운영체제가 멀티스레드를 지원하지 않을 때 사용, 커널 입장에서 하나의 프로세스로 보임, 1toN모델, 라이브러리가 스케쥴링이나 동기화 같은 기능 대신 구현 ,문맥교환 없음
(-) 커널 스레드가 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기, 한 프로세스의 타임 슬라이스 공유->여러 개 CPU 동시 사용 불가, 보안 취약
3) 멀티 레벨 스레드
- 사용자 스레드 & 커널 스레드 혼합, MtoN모델, 커널 스레드 개수<=사용자 스레드 개수
(+) 유연한 작업 처리
(-) 문맥교환 시 오버헤드
댓글