[OS] 3. 프로세스와 스레드

Park H·2020년 12월 30일
0

OS

목록 보기
3/9

1. 프로세스의 개요

1)프로세스 개념

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

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

  1. 프로세스 : 컴퓨터 시스템의 작업 단위, 태스크(Task) 라고도 함
  1. 프로그램이 프로세스가 되는 과정
    가. OS가 프로그램을 메모리에서 가져온다.

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

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

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

    가. 프로세스 구분자

    • 프로세스 ID

    나. 메모리 관련 정보

    • 프로세스가 원래 메모리의 어디에 저장되어있는지를 알아야 한다.
    • 또한, 메모리 보호를 위한 (경계, 한계) 레지스터도 포함되어있다.

    다. 각종 중간 값

    • 프로세스가 사용했던 중간 값 저장 (Save 기능)
    • 프로그램 카운터 : 다음에 작업해야할 코드의 위치가 담김

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


정리

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

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


  • 프로세스 : 프로그램 + 프로그램 제어블럭
  • 프로그램 : 프로세스 - 프로그램 제어블럭

3) 프로세스의 종류

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

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

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

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

4) 프로세스의 상태

  1. 일괄 작업 시스템
    : 생성 → 실행 → 완료

  1. 시분할 시스템 (4가지)
    : 생성 → 준비 → 실행 → 완료

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

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

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

    4) 완료 상태
    : 프로세스 제어블럭 소멸

  2. 디스 패치(dispatch) - 미리 가져오기
    : 준비상태의 프로세스 중 하나를 골라 실행 상태로 바꾸는 CPU 스케줄러의 작업

  1. 인터럽트(타임아웃)
    : 타임슬라이스 후 다시 준비 상태로 돌아가는 것

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

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

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

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

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

    .

  2. 대기상태

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

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

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

    6) 휴식상태와 보류상태

    1. 활성 상태
      : 생성 / 준비 / 실행 / 대기 / 완료
      .

    2. 휴식 상태
      : 프로세스가 작업을 일시적으로 쉬고 있는 상태
      ⇒ 제어블럭 유지, 멈춘 시점부터 재시작 가능
      .

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

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

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

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

2. 프로세스 제어블럭과 문맥 교환

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

(구성)

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

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

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

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

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

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

아. 메모리 관리 정보

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

차. 계정 정보

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

2) 문맥 교환

  • 프로세스 작업이 바뀌면서 일어남
    ⇒ 제어블럭을 교환하는 작업

  • 일어나는 경우
    1) 프로세스 작업이 끝났을 때

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

3. 프로세스의 연산

1) 프로세스의 구조

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

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

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

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

<시스템 호출>

  1. fork() - 생성, 복사

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

    ex) 크롬 -> 복사

    • 이때 샐행하던 프로세스는 부모 - 자식 관계 성립
  • fork()의 과정

    1. 프로세스 구분자가 바뀜

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

    3. 부모 구분자/ 자식 구분자가 바뀜

  • fork()의 장점

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

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

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

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


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

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

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

    (목적)

    1. 프로세스의 구조체를 재사용하기 위해서
      (미리 만들어둔 제어블럭을 사용)

  1. 프로세스 계층구조

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

(장점)

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

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


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

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

4. 스레드

  1. 스레드
    : CPU내에 작업 요청을 하는 실행 단위
    -> 스레드는 프로세스 내부에서 서로 강하게 연결되어 있다.
  • 프로세스(OS) > 스레드 (CPU)
  1. 멀티 태스크
    : 워드나 프린터 같이 서로 독립적인 태스크

  2. 멀티 스레드
    : 워드 안에 그림판, 사진, 맞춤법 검사 등과 같은 것

0개의 댓글