TIL

23.11.27

오잉머신 2023. 12. 5. 17:24

반효경 교수님 [운영체제] 강의 듣기

  • 1-2 운영체제란 무엇인가
  • 2-2 : 프로그램의 실행
  • 3-1 : 프로세스의 개념, 상태

01. 운영체제란 무엇인가

  • 커널
    • os의 핵심
    • 부팅 이후 메모리에 상주
  • 운영체제의 목적
    • 사용자가 컴퓨터 시스템을 편하게 사용하기 위해
    • 하드웨어(cpu, memory, I/O등) 관리
  • 운영체제의 구조
    • CPU 스케줄링 : 누구한테 cpu를 줄까?
    • memory 관리 : 한정된 메모리를 어떻게 쪼개어 쓰지?
    • file 관리 : disk에 file을 어떻게 보관하지?
    • I/O 관리 : 각기 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고 받게 하지?
    • process 관리
      • process 생성과 삭제
      • 자원 할당 및 반환
      • process 간 협력

02. Overview

1) 컴퓨터 시스템 구조

  • CPU
    • memory의 특정 위치에 있는 instruction을 실행한다
      • 어떤 위치? cpu속 register 중 하나인 PC가 가르키는 주소
    • 다음 instruction을 읽기 전에 Interrupt가 있는지 확인
      • 있으면 cpu를 OS에 넘김
  • memory
    • cpu의 작업 공간
    • cpu는 memory랑만 일한다
  • 각 I/O device 별로
    • 작은 cpu 가짐 (device controller)
    • 작은 memory 가짐 (local buffer)
  • 기타
    • mode bit : user application 실행 중인지 kernel 실행 중인지
      (kernel mode일 때만 모든 명령 실행 권한 가짐)
    • timer : process에게 할당된 시간 끝나면 interrupt 날림
      (특정 프로그램이 cpu 독점하는 것을 막기 위해)
    • device controller : I/O 작업을 전담하는 작은 cpu (하드웨어임)
      • !!! I/O는 실제 device와 local buffer사이에서 일어남 !!!
      • I/O가 끝나면 interrupt로 CPU에 그 사실을 알림
      • output하고 싶을 때 : 컴퓨터의 memory에 있던 데이터를 I/O device의 local buffer에 옮기고 작업 지시
      • input하고 싶을 때 : I/O device로부터 local buffer에 데이터 넣고 그 데이터를 컴퓨터의 memory로 옮김
    • DMA (Direct Memory Access)
      • CPU 개입없이 메모리 접근하는 기법
        (CPU의 개입없이 I/O device와 memory 사이의 데이터 직접 전송)
      • CPU 대신 local buffer에서 memory에 데이터 옮김 (cpu 할 일 대신 해주는)
      • I/O 작업 끝날 때마다 cpu에 interrupt 거는 것은 cpu 입장에서 큰 오버헤드
        -> DMA controller가 cpu대신 I/O device의 local buffer에서 데이터 퍼서 memory에 올려주고
        -> 좀 쌓이면 그 때 cpu에 interrupt

2) I/O의 수행

  • I/O 요청 : user application이 system call을 통해 OS에 I/O 요청
  • I/O 완료 : I/O controller가 interrupt를 통해 I/O 완료 알림

3) interrupt

interrupt 당한 시점의 register와 PC를 save한 후

CPU의 제어를 kernel의 인터럽트 처리 루틴에 넘긴다

  • hw interrupt : hw가 발생시킨 interrupt
    • timer 완료 : 시간 끝났으니 cpu 뺏어서 다음 process에게 넘김
    • I/O 작업 완료
  • sw interrupt
    • Exception : 프로그램에서 오류 발생
    • System call : 프로그램이 kernel 함수 호출
      (user application이 os에게 부탁)

4) Sync I/O vs Async I/O

  • Sync : 결과가 나와야 다음 할 일 가능 -> 결과 기다림
    (결과를 가지고 해야할 때, 제대로 되어야 다음 일을 할 수 있을 때)
    • 방법 1 : Process A가 Sync I/O 요청하고 cpu들고 기다림 -> cpu 낭비, 매시점 하나의 I/O만
    • 방법 2 : Process A가 Sync I/O 요청하고 Process B에게 cpu 넘김 -> cpu 열일, I/O 여러개 동시 실행 가능
      (cpu 넘겨받은 Process B가 I/O 작업 요청하면 Process C에게 cpu 넘기고..)
  • Async : 결과 상관없이 자기 할 일 -> 결과 안 기다리고 자기 할 일함
    (결과 필요 없이 할 수 있을 때, 제대로 되든 말든 다음 일 할 수 있을 때)
    • Process A가 Async I/O 요청하고 cpu들고 자기 할 일

5) 프로그램의 실행

파일 시스템에 실행 파일 형태로 저장

-> 실행 파일을 실행시키면 memory로 올라가서 process가 됨

 

자세히 보면..

사실 process마다 만들어지는 독자적인 주소 공간(virtual memory)는 논리적인 공간

-> 실제로 연속적으로 할당되는게 아니라 어떤 부분은 memory에 어떤 부분은 disk에 존재

 

당장 필요한 부분만 physical memory에

당장 필요하지 않은 부분은 disk(swap area)에

 

각 프로세스마다 virtual memory는 0번지부터 시작
-> virtual memory에서 1000번지라고 실제 physical memory에서도 1000번지인거 아님 (address translation)

 

그림에서 hdd 2개
- 오른쪽거는 file system용도 (전원 나가도 살아있음) -> 비휘발성
- 왼쪽거는 swap area용도 (전원 나가면 의미없음) -> 부족한 메모리 보완(메모리의 연장공간)