쉽게 배우는 운영체제 - 프로세스와 스레드

jeong_hyeon·2022년 6월 21일
0

책정리

목록 보기
6/6

프로세스

프로세스의 개념

  • 프로그램은 저장장치에 저장되어있는 정적인 상태 -> 프로세스는 실행을 위해 메모리에 올라온 동적인상태
    즉 프로그램 실행을 위해 메모리에 올라온 동적인 상태를 말한다.

    프로세스는 컴퓨터 시스템의 작업 단위로 태스크(Task)라고 한다.

프로세스 제어 블록(PCB)

  • 프로세스를 실행시 운영체제가 만드는 작업 지시서
  • 프로세스를 처리하는데 필요한 다양한 정보가 들어 있다.

1. 프로세스 구분자

  • 메모리에는 여러개의 프로세스가 존재하는데 이를 구별하기 위한 프로세스를 구분하는 프로세스 구분자(PID)가 있다.

2. 메모리 관련정보

  • CPU는 실행하려는 프로세스가 어디에 저장되어 있는지 알아야한다.
  • 그래서 프로세스 제어블록(PCB)에 프로세스가 메모리의 어디에있는지 나타내는 메모리 위치정보가 들어있다.
  • 또한 메모리 보호를 위해 경계 레지스터와 한계 레지스터도 포함되어있다.

3. 각종 중간 값

  • 프로세스가 사용했던 중간 값을 저장(저장기능)
  • 다음 작업의 위치값인 프로그램 카운터(PC)도 같이 저장 된다.

프로세스와 프로그램의 관계
프로세스 = 프로그램 + 프로세스 제어 블록(PCB)
프로그램 = 프로세스 - 프로세스 제어 블록(PCB)

프로세스의 상태

일괄 작업 시스템

생성 -> 실행 -> 완료

시분할 시스템

생성 -> 준비 -> 실행 -> 완료

프로세스의 네 가지 상태

  1. 생성 상태 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태, 제어 블록 색성
  2. 준비 상태 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
  3. 실행 상태 : 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태(일정 시간만 부여)
    -> 만약 일정시간안에 해결 못할 시 준비상태 <-> 실행 상태를 반복한다.
  4. 완료상태 : 실행 상태의 프로세스가 주어진 시간 안에 작업을 마친 상태(PCB가 사라진 상태)
  • 스케줄러 : 준비상태에 있는 프로세스 중 다음 실행할 프로세스 선정
  • 디스패치 : 준비상태 -> 실행 상태로 바꾸는 CPU 스케줄러의 작업
  • 타임 슬라이스, 타임 퀀텀 : 프로세스에 배당된 작업시간
  • 타임 아웃 : 주어진 시간(타임 슬라이스)안에 작업이 끝나지 않아 준비상태로 돌아간 상태

프로세스의 다섯가지 상태


오늘날 운영체제는 효율성을 고려하여 "대기상태"를 추가

  • 대기상태 : 입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태
    - 효율성을 높이기 위해 프로세스를 실행 상태에 두지 않고 대기 상태로 옮긴다.

휴식상태와 보류상태

활성 상태 : 대부분의 프로세스는 생성, 준비, 실행, 대기, 완료 상태 (5가지 상태)로 운영된다.

휴식 상태 : 프로세스가 작업을 일시적으로 쉬고있는 상태
보류 상태 : 프로세스가 메모리에서 잠시 쫒겨난 상태 (바이러스 오류등)

프로세스 제어 블록과 문맥 교환

프로세스 제어 블록(PCB)

  • 프로세스를 실행하는데 필요한 중요한 정보를 보관하는 자료구조로 (TCB : Task Control Block라고도 한다.)

문맥교환 (context switch)

  • CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업

문맥교환이 일어나는경우

  • 타임 퀀텀이 지나면서 발생, 인터럽트 때 발생

프로세스의 연산

프로세스의 구조

  • 코드 영역
    프로그램의 본문이 기술된 곳으로 텍스트 영역이라고도 한다.
  • 데이터 영역
    코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아 놓은곳
  • 스택 영역
    운영체제가 프로세스를 실행 하기 위해 부수적으로 필요한 데이터를 모아놓은 곳

프로세스의 생성과 복사

fork()

  • 개념
    실행중인 프로세스를 그대로 복사하는 함수

  • 장점
    1.프로세스의 생성 속도가 빠르다.
    2.추가 작업 없이 자원을 상속할수 있다.
    3.시스템 관리를 효율적으로 할수있다.

  • 동작과정

  • 프로세스 구분자가 바뀐다.   

  • 부모 자식이라도 자기 자신을 칭하는 고유한 번호가 존재한다.

  • 부모 자식이 차지하고 있는 메모리 위치가 다르므로 메모리 관련 정보도 바뀐다.

프로세스의 전환

exex()

  • 개념
    기존의 프로세스를 새로운 프로세스로 전환 하려는 함수

  • 장점
    1.이미 만들어진 프로세스의 구조를 재활용
    2.재활용을 하면 프로세스 제어 블록, 메모리 영역, 부모 자식 관계를 그대로 사용 가능하여 편리하다.
    3.새로운 코드 영역만 가져오면 되기 때문에 운영 체제의 작업이 수월하다.

  • 동작 과정

  • 기존 코드 지우고 새로운 코드로 변경

  • 데이터 영역이 새로운 변수로 채워지고 스택 영역은 리셋

  • 각종 레지스터 정보 모두 리셋

프로세스의 계층 구조

장점

  • 여러 작업 동시처리
  • 용이한 자원 회수

고아프로세스

  • 프로세스가 종료된 후에도 비정상적으로 남아있는 프로세스
  • 좀비 프로세스라고도 부른다.

스레드

운영체제 작업 단위 = 프로세스
CPU작업 단위 = 스레드

CPU내에 작업 요청을 하는 실행 단위 = 스레드
프로세스(운영체제) > 스레드(CPU) : 프로세스가 더 큰개념

프로세스와 스레드의 차이점

프로세스끼리 연결 : 약한연결
스레드끼리연결 : 강한 연결

스레드 관련 용어

  • 멀티 스레드 : 프로세스 내 작업을 여러개의 스레드로 분할 -> 작업 부담이 적어진다.
  • 멀티 태스킹 : 운영체제가 CPU에 작업을 줄때 시간을 잘게 나누어 배분하는 기법
  • 멀티 프로세싱 : CPU를 여러개 사용하여 여러 개의 스레드를 동시에 처리하는 작업환경
  • CPU 멀티 스레드 : 파이프라인 기법을 이용하여 동시에 여러스레드를 처리하는 병렬 처리 기법

멀티 스레드

  • 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행 하는 과정

장점

  1. 응답성 향상
    한 스레드가 작업을 안 해도 다른 스레드가 작업을 계속하여 빠르게 응답할수있다.
  2. 자원 공유
    한 프로세스 내에 독립적인 스레드를 생성하면 모든 스레드가 공유
  3. 효율성 향상
    자원의 중복 제거
  4. 다중 CPU 지원
    다중 CPU가 멀티 스레드를 동시에 처리하는 것 -> 프로세스 처리 시간이 낮아진다.

단점

모든 스레드가 자원을 공유 하기때문에 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다.

멀티스레드 모델

사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드

  • 운영체제가 멀티스레드를 지원하지 않을 때 사용
  • 관련 라이브러리를 사용하여 구현
  • 사용자 프로세스 내에 여러개의 스레드가 존재 하지만 커널의 스레드 하나와 연결된다 : 1 to N 모델이라고도 한다.
    장점
  • 문맥 교환이 필요없다. -> 부가 작업이 줄어들어 속도가 빠르다.
    단점
  • 한 프로세스의 타임 슬라이스를 여러 스레드가 공유 하기 때문에 여러개의 CPU를 동시에 사용할수 없다.
  • 보안에 취약하다 : 라이브러리에서 보안 부분을 구현해야 하기 때문이다.

커널 스레드 : 커널이 직접 생성하고 관리하는 스레드

  • 커널이 멀티 스레드를 지원하는 방식
  • 하나의 사용자 스레드가 하나의 커널 스레드와 연결된다 : 1 to 1 모델이라고도 한다.
    장점
  • 커널 레벨에서 모든 작업을 지원 -> 멀티 CPU를 사용할수있다.
  • 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속할수있다.
  • 보안에 강하고 안정적으로 작동한다.
    단점
  • 문맥 교환을 할때 오버 헤드 때문에 느리게 작동한다.

멀티레벨 스레드 : 사용자스레드와 커널 스레드를 혼합한 방식

  • 하이브리드 스레드 라고도 한다
  • 사용자 스레드에서는 커널 스레드의 개수가 사용자 스레드 보다 적기 때문에 멀티 레벨 스레드에서는 커널 스레드의 개수가 사용자 스레드보다 같거나 적다. : M to N 모델이라고도 부른다.
  • 사용자 스레드와 커널 스레드의 장단 점을 모두 가지고있다.
    장점
  • 유연한 작업처리
    단점
  • 문맥교환시 오버헤드가 있어 사용자 스레드만큼 빠르지 않다.

빠르게 움직여야하는 스레드는 사용자 스레드로 작동하고 안정적으로 움직여야하는 스레드는 커널 스레드로 작동한다.

0개의 댓글