본문 바로가기
CS/운영체제

운영체제 2일차

by 동백05 2023. 7. 20.

* 쉽게 배우는 운영체제

 

프로세스

운영체제에서 하나의 작업 단위

 

프로세스 제어 블록(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모델, 커널 스레드 개수<=사용자 스레드 개수

(+) 유연한 작업 처리

(-) 문맥교환 시 오버헤드

'CS > 운영체제' 카테고리의 다른 글

운영체제 1일차  (0) 2023.07.11

댓글