[운영체제] #7강

Junyoung Park·2022년 8월 2일
0

운영체제

목록 보기
7/25
post-thumbnail
  • 배치 스케줄링: 하나의 작업이 온전히 종료될 때까지 다른 작업을 실행하지 않고 기다리는 스케줄링
  • 멀티 프로그래밍: 하나의 작업이 종료하지 않아도 다른 작업을 실행하는 스케줄링(I/O 입력 등)
  • Time sharing: 모든 프로그램이 정해진 타임 슬라이스 동안 CPU 점유 → 시간이 끝나면 CPU 양보(relinguish) - 컨텍스트 스위칭
  • Context Switching: CPU A → CPU B로 바꿔주는 OS의 조정 과정, PCB 활용 - 기존 작업 정보 세이브 → 이전 작업 정보 로드 → 기존 저장한 정보 로드 ... 반복

프로세스

PCB / TCB

  • Process or Thread Control block
  • 각 프로세스는 PCB를 통해 표현
  • 메모리 내 저장되는 자료 구조
  • 프로세스 상태 정보 → running, wating, etc
  • PC: 다음 실행 될 인스트럭션의 위치 정보
  • CPU 레지스터: 프로세스 중심 레지스터 컨텐츠
  • CPU 스케줄링 정보: 우선순위, 스케줄링 큐 포인터
  • 메모리 관리 정보: 프로세스에 할당된 메모리
  • 어카운트 정보: 사용된 CPU, 클록 타임(time sharing을 위한 정보)
  • I/O 상태 정보: 프로세스 할당 I/O 디바이스, 오픈 파일 리스트

컨텍스트 스위칭

  • 인터럽트/시스템 콜을 통해 현재 실행 중인 프로세스 상태 정보를 저장하라는 시그널
  • 오버헤드: CPU 구조에 따라 서로 다른 오버헤드. 레지스터 개수가 많다면 오버헤드가 크기 때문. HW 지원에 따라서 시간이 달라짐
  • CISC(Complex Instruction Set Computer): 복잡한 명령어 집합, 고효율, 클럭 속도 저하, 복잡한 회로로 인한 물리적 공간 차지, 레지스터 용량 저하
  • RISC(Reduced Instruction Set Computer): 간단한 명령어 집합, 높은 클록 속도로 수행 속도가 빠름, 절약된 물리적 공간에 많은 레지스터 장착, 컨텍스트 스위칭 시 CISC보다 더 큰 오버헤드 발생

스레드 스위칭

  • 컨텍스트 스위칭: 프로세스 간 전환, 주소 공간 스위칭이 필수적
  • 동일한 주소 공간 참조 → CPU 내 레지스터 값만 변경하기. 적은 오버헤드 발생 → 컨텍스트 스위칭과 달리 TLB, cache flush를 필요로 하지 않음
  • 병렬적 동작 프로그램 → 프로세스를 다수의 스레드로 사용하기(자원 공유를 통한 보다 효율적인 스레드 스위칭 가능)

TLB

  • Translation lookaside buffer
  • 유저 메모리 공간에 접근하는 시간을 줄이기 위해 사용되는 메모리 캐시
  • TLB 정보가 없다면 MMU(Memory Management Unit)에게 반복해서 쿼리해야 함
  • 컨텍스트 스위칭 마다 TLB를 flush, load 필요 → 실행 흐름인 프로세스가 이전 프로세스의 주소 공간에 침범하지 못하도록 protection domain

상태 다이어그램

프로세스 상태

  1. New: 프로세스가 생성되었을 때
  2. Running: 인스트럭션이 실행 중
  3. Waiting: 프로세스가 특정 이벤트 발생을 기다리고 있는 상태, I/O 완료나 시그널 리셉션을 대기
  4. Ready: 프로세스가 프로세서에 할당되기를 대기
  5. Terminated: 프로세스가 실행을 종료

커널 내 Ready 큐, Waiting 큐, Running 큐 → 상태에 따라 관리함

프로세스 생성 및 종료

  • 리눅스: fork() 함수 호출 - 부모/자식 프로세스 간의 트리 구조 형성
  • PID: 프로세스 식별자
  • 부모 프로세스 → 자식 프로세스 생성 ... → 자식 프로세스 생성
  • fork() 시 세 가지 옵션 존재: (1). 부모/자식 모든 자원 공유 (2). 자식이 부모의 자원 부분집합 (3). 공유 X
  • 실행 옵션: (1). 부모/자식 동시(concurrentyl) 실행 (2). 자식 종료할 때까지 부모 대기

생성 메커니즘

  • 주소 공간: 자식 → 부모 복제, 복제 공간에 프로그램 로드

  • UNIX: fork() 시스템 콜이 새로운 프로세스 생성, exec() 시스템 콜이 fork() 이후 부모로부터 물려받은 메모리 공간을 자신의 프로그램으로 대체하는 시스템 콜 Exec() 실행
  • Windows: createProcess() 실행 → 실행 프로그램 이름 및 실행 행동 커맨드 라인에 표기

종료 메커니즘

  • Exit() 시스템 콜: 자식 프로세스에 할당된 모든 메모리 공간을 해제
  • Abort() 시스템 콜: 자식 프로세스 작업이 종료되지 않아도 부모 프로세스가 임의로 종료 가능(자식 프로세스가 자원을 너무 많이 사용하거나, 부모가 종료해야 할 때)
  • 부모 프로세스 - 자식 프로세스: 부모 프로세스가 종료되면 자식 프로세스가 허용되지 않음. 프로세스가 종료되면 자식 프로세스는 모두 종료되어야 함(Cascading Termination)
  • wait() 시스템 콜: 부모 프로세스가 자식 프로세스 종료를 기다릴 때 호출하는 시스템 콜. 종료된 자식 프로세스의 상태 정보를 리턴하는 함수

pid=wait(&status)

  1. Zombie: wait() 호출한 부모 프로세스가 자식 프로세스의 상태 정보를 리턴하지 않았을 때(termination 과정에서 일시적으로 모든 프로세스는 Zombie)
  2. Orphan: 부모 프로세스가 자식 프로세스보다 먼저 종료된 때
profile
JUST DO IT

0개의 댓글