운영체제/쉽게 배우는 운영체제

[OS] 3. 프로세스와 스레드 (쉽게 배우는 운영체제 3장)

민돌v 2022. 5. 8. 01:39
쉽게배우는 운영체제, 한빛미디어 - 요약 및 공부한 내용입니다.

 


1. 프로세스의 개요

1)프로세스 개념

* 프로세스 : 실행중인 프로그램

- 프로그램이 메모리위에 올라가면 프로세스가 된다. (실행)

⇒ 프로그램 -> 프로세스

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

- 프로세스 : 컴퓨터 시스템의 작업 단위, 태스크(Task) 라고도 함

프로그램이 프로세스가 되는 과정

가. OS가 프로그램을 메모리에서 가져온다.

 

나. 동시에 작업지시서를 작성한다. (프로세스 제어블럭) ->필수

다. 프로세스 제어블럭에는 다양한 정보가 들어있다.

프로세스 제어블럭( in 정보 )

가. 프로세스 구분자

: 프로세스 ID

나. 메모리 관련 정보

- 프로세스가 원래 메모리의 어디에 저장되어있는지를 알아야 한다.

- 또한, 메모리 보호를 위한 (경계, 한계) 레지스터도 포함되어있다.

다. 각종 중간 값

- 프로세스가 사용했던 중간 값 저장 (Save 기능)

- 프로그램 카운터 : 다음에 작업해야할 코드의 위치가 담김

⇒ 프로세스 제어블럭은 운영체제 영역엣 만들어 진다.

 

<정리>

1. 프로그램이 프로세스가 된다는 것은, 운영체제로 부터 "프로세스 제어블럭"을 얻는 것이다.

2. 프로세스가 종료된다는 건 해당 프로세스 제어블럭이 폐기 된다는 것이다.

3. 프로세스 : 프로그램 + 프로그램 제어블럭

4. 프로그램 : 프로세스 - 프로그램 제어블럭

3) 프로세스의 종류

- OS도 프로그램이다. 부트스트랩에 의해 실행됨

- 컴퓨터에는 사용자 프로세스와 커널 프로세스가 섞여서 실행

가. 일반 사용자의 "사용자 프로세스 "

나 . 운영체제의 "커널 프로세스"

4) 프로세스의 상태

일괄 작업 시스템

: 생성 → 실행 → 완료

시분할 시스템 (4가지)

: 생성 → 준비 → 실행 → 완료

1) 생성 상태

: 프로세스가 메모리에 올라와 실행 준비, 프로세스 제어블럭 생성

2) 준비 상태

: 생성된 프로세스가 CPU를 얻을때 까지 기다리는 상태

3) 실행 상태

: CPU를 얻어 실행 / 주어진 시간이 끝났지만 작업이 끝나지 않은면 → 준비상태로 감

4) 완료 상태

: 프로세스 제어블럭 소멸

디스 패치(dispatch) - 미리 가져오기

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

인터럽트(타임아웃)

: 타임슬라이스 후 다시 준비 상태로 돌아가는 것

→ 정확히는 "클럭으로부터의 인터럽트"

5) 프로세스의 5가지 상태 (대기상태 추가)

→ 호율성을 고려하여 "대기 상태" 추가

인터럽트 시스템에서 프로세스가 입출력 요구하면

cpu가 아무 작업을 하지 않고 기다려야 한다.

.

대기상태

- 입출력을 요구한 프로ㅔ스가 입출력이 완료될 때 까지 기다리는 상태를 대기상태라고 한다.

- 효율성을 높이기 위해 입출력을 요청한 프로세스를 실행 상태에 두지 않고 대기상태로 따로 분류한다.

⇒ 입출력이 완료되면 바로 실행되지 않고 X, 대기상태로 간다.

6) 휴식상태와 보류상태

활성 상태

: 생성 / 준비 / 실행 / 대기 / 완료

.

휴식 상태

: 프로세스가 작업을 일시적으로 쉬고 있는 상태

⇒ 제어블럭 유지, 멈춘 시점부터 재시작 가능

.

보류 상태

: 프로세스가 메모리에서 잠시 쫒겨난 상태 ( = 일시적 상태)

⇒ 보류상태가는 이유

: 대부분 컴퓨터 성능을 떨어뜨리거나 실행을 미루어도 큰 지장이 없는 프로세스

[보류 상태를 포함한 프로세스 상태]

⇒ 보류상태로 들어간 프로세스는 메모리 밖으로 쫒겨나 "스왑 영역"에 보관된다.

2. 프로세스 제어블럭과 문맥 교환(Context Switching)

1) 프로스세 제이블럭(PCB)

(구성)

가. 포인터 : 프로세스 제어블럭의 첫번째 블럭에 저장 ( 큐 구현할때 이용)

나. 프로세스 상태 : 생성, 준비, 실행, 대기, 보류 준비, 보류 대기 등 (두 번째 블럭에 저장)

다. 프로그램 구분자 : 운영체제 내에서 프로세스를 구별하기 위한 것

라. 프로그램 카운터 : 다음에 실행 될 명령어의 위치 저장

마. 프로세스 우선순위 : CPU 스케줄러가 준비상태에서 실행상태로 옮길 때 사용

사. 각종 레지스터 정보 : 자신이 사용하던 레지스터의 중간 값

아. 메모리 관리 정보

자. 활당된 자원 정보 : 입출력 자원, 오픈 파일

차. 계정 정보

카. 부모 프로세서 구분자, 자식 프로세스 구분자

2) 문맥 교환 (context switching

- 프로세스 작업이 바뀌면서 일어남, 문맥교환은 멀티 프로세스 작업 시 일어납니다.

⇒ 제어블럭을 교환하는 작업

일어나는 경우

1) 프로세스 작업이 끝났을 때

2) 인터럽트에 걸렬을 때 (Time Slice)


3. 프로세스의 연산

1) 프로세스의 구조

- 코드 영역 : 코드(소스) 프로세스 본문 기술

- 데이터 영역 : 프로세스의 데이터 영역

- 스택 영역 : 운영체제가 부수적으로 관리하는 데이터 영역

2) 생성과 복사 (fork()와 exec())

<시스템 호출>

1. fork() - 생성, 복사

실행중인 프로세스로부터 새로운 프로세스를 "복사"하는 함수

ex) 크롬 -> 복사

이때 샐행하던 프로세스는 부모 - 자식 관계 성립

2. fork()의 과정

- 프로세스 구분자가 바뀜

- 메모리 관련정보가 바뀜 (위치가 다르기 때문에)

- 부모 구분자/ 자식 구분자가 바뀜

3. fork()의 장점

- 프로세스 생성 속도가 빠르다

- 추가 자원 없이 자원을 상속할 수 있다

- 시스템 관리를 효율적으로 할 수 있다.

(자식 종료 ⇒ 부모가 정리)

4. Exec() - 프로세스 전환

- fork() 후 Exec() - 복사후 수정

- exec() : 기존의 포로세스를 새로운 프로세스로 전환하는 함수

(목적)

- 프로세스의 구조체를 재사용하기 위해서

(미리 만들어둔 제어블럭을 사용)

5. 프로세스 계층구조

: init 프로세스가 루트로 -> fork()->exec() 자식 프로세스 생성

(장점)

여러 작업의 동시 처리가 가능

종료된 프로세스의 자원을 회수하는데 유용

5. 미아 프로세스

: 부모 프로세스가 먼저 종료 되거나 / 자식 프로세스의 비정상적인 종료로 인한 연락 두절 되는 경우

: 프로세스가 정상적으로 회수되지 않은 프로세스


4. 스레드

1) 스레드

: CPU내에 작업 요청을 하는 실행 단위

-> 스레드는 프로세스 내부에서 서로 강하게 연결되어 있다.

* 프로세스(OS) > 스레드 (CPU)

2) 멀티 태스크

: 워드나 프린터 같이 서로 독립적인 태스크

3) 멀티 스레드

: 워드 안에 그림판, 사진, 맞춤법 검사 등과 같은 것