[운영체제] 3. Processes

Kim Nahyeong·2021년 10월 12일
0

운영체제

목록 보기
3/3

프로세스의 개념

Process : A program in execution

한 마디로 프로세스란? 실행중인 프로그램

program, process, processor 혼용해서 사용하기도
(+) processor : 프로세싱하는 주체 (CPU)

메모리에서의 프로세스

메모리 구조

  • Stack : 지역변수, 매개변수 호출 시
  • Heap : 동적 메모리 할당 (C언어의 malloc)
  • Data : static (전역 변수, 상수)
  • Text : 프로그램 코드

이거 진짜 시험 단골 문제인 듯

OS가 프로세스 관리 하는 법

  • 프로그램 실행 -> Disk(하드디스크)에서 메모리로 프로그램 올림 (위의 구조)

OS는 PCB(Process Control Block)으로 프로세스 관련 정보를 struct(구조체) 형태로 저장해서 관리한다!

PCB (Process Control Block)

: 프로세스 정보데이터 구조화 해서 리스트로 관리를 한다.
구조체 형태로 저장함

struct{
	int pid
    int state
    .
    .
    // 이런 형태로
}

  • Process State : 프로세스 상태
New
Running : CPU에 실행 중
Wait : event 발생 기다릴 때, I/O request 기다릴 때
Ready : 일 끝나고 CPU 쓸 수 있는 상태 (CPU 준비)
Terminated : 종료
  • Program Counter
    : PC - CPU 안의 특별한 레지스터, 다음 실행 명령어의 주소를 저장한다!
  • CPU register

    Q) 레지스터는 왜 기억하고 그대로 복사하는가?

    A) 변수는 메모리에 저장된다. CPU 쓰다가 쫓겨나면 쓰던 값으로 복사해야 다시 running할 때 다시 계속 실행할 수 있다
    계속 하던 일 계속하게!
    쫓겨날 때(interrupt or system call) copy하고 다시 불려오면 복붙(reload)한다. Memory는 항상 그대로, CPU는 지워진다. 메모리에서 CPU로 명령어를 가져와서 실행, 그 다음 명령어 가져와서 실행,,, (무한 반복)
    이 PCB를 저장하고 로드 하는 과정이 바로 Context Switch
    ++ CPU 안에 레지스터 있다.

  • CPU scheduling information
  • Memory-management information
  • Accounting information
  • I/O status information

OS도 프로그램임을 잊지 말자.

Process State

  • New
  • Running : CPU에 실행 중
  • Wait : event 발생 기다릴 때, I/O request 기다릴 때
  • Ready : 일 끝나고 CPU 쓸 수 있는 상태 (CPU 준비)
  • Terminated : 종료

Q) interrupt는 왜 발생하는가?
A) 스케쥴링 방식에 따르다. CPU 쓰고 있다가도 못 쓰게 되는 상황이 온다.

Running -> Waiting은 주로 값 요청하고 그 값 기다릴 경우가 많다.

Context Switch

멈추고 프로세스를 교체한다.
실행되던 상태를 PCB에 저장하고 이제 실행할 프로세스의 상태를 CPU에 넘긴다(로드).

이 프로세스 교체는 공짜인가?
전혀 아니다! 항상 교체할 때는 교체 시간인 오버헤드(Overhead)가 발생한다! PCB를 저장하고 로드하는데 시간이 필요하다는 뜻.

Process Creation


++ fork해서 반환되는 pid의 값이 음수면 실패한 것이다

Unix에서의 예시

  • fork() : 프로세스 생성
    fork()가 실행되면 해당 프로세스 0(Parent Process)의 PCB0가 고대로 복사해서 새로운 자식 프로세스 1(Child Process)과 PCB1을 만든다.
    그리고 fork 다음부터 기존 프로세스 0과 동일하게 쭉 동작한다!

  • exec() : 현재 실행할 프로세스를 바꾼다 (= execlp() )
    실행하는 순간 코드 영역을 지우고 execlp 안의 프로그램을 카피해서 로드한다.

과제로 프로세스 4개를 구현해보라는 과제가 나왔는데 fork를 2번만 하면 되었다.
8번은 fork가 3번이면 된다.

fork되는 순간 프로세스는 복제되어 그 다음부터 똑같이 복제되어 같이 실행된다. 그러니까 fork를 한 번 부르면 2개, 다음 fork에서 2개의 프로세스가 fork를 만나 2개로 늘어난다.
1 -> 2 -> 4 -> 8 -> 16 -> ...

Process Termination

  • exit() 이 시스템 콜을 호출해서 끝낸다.

Communications Models

프로세스 A와 B가 값을 공유하는 방식
IPC라고도 한다.

IPC (Inter Process Communication)
프로세스 간의 통신

(a) : Message Passing
편지 주고 받는 것 처럼 Send하고 Receive하며 값을 주고받으며 사용한다.

(b) : Shared Memory (공유 메모리)
공유 메모리를 같이 접근하여 값을 사용한다.

Pipes

두 프로세스가 통신하는 방법이다.
굉장히 원시적으로 단방향이다. 쓰기만 하고, 읽기만 하고.
그래서 양방향으로 쓰려면 파이프를 2개 사용하여야한다.

0개의 댓글