컴퓨터 시스템의 구조에 대해 알아보자

Untitled

  • CPU
    • 메모리에 있는 instruction을 읽어가며 작업을 진행함
    • intstucction이 끝날 때 interrupt line을 읽는 과정을 반복
  • 메모리
    • Memory Controller를 통해 메모리 관리
    • 메모리는 CPU의 작업 공간
    • CPU만 접근 가능
    • Local Buffer에 있는 값을 복사해서 저장하기도 함
  • I/O 장치
    • Device Controller
      • I/O장치를 관리하는 작은 CPU
      • 제어 정보를 위해 control register, status register를 가짐
      • local buffer를 통해 작업을 잠시 저장 가능
    • Disk는 Input장치이자 Output 장치
    • 키보드/마우스는 Input 장치
    • 프린터/모니터는 Output 장치
  • DMA Controller(Direct Memory Access)
    • interrupt가 너무 많이 발생하다 보니 CPU 효율이 떨어져서 중간 중간 발생하는 DMA가 localbuffer를 읽어 메모리에 복사한 다음 모아서 CPU에 Interrupt를 한번 발생
  • Disk는 CPU에 비해 100만배 정도 느림
  • registers
  • mode bit
    • 지금 실행하는게 kernel mode인지 user mode인지 구분
    • 시스템에 중요한 영향을 미치는 연산은 커널 모드에서만 진행함으로써 하드웨어 보호
    • Kenel Mode(Monitor Mode, 0)
      • 운영체제가 CPU의 제어권을 가지고 운영 체제 코드를 실행하는 모드
      • 모든 종류의 명령을 다 실행할 수 있음
      • Interrupt가 발생할 때 mode bit을 0으로 바꾸고 넘김
    • User Mode(1)
      • 일반 사용자 프로그램이 실행되며 제한적인 명령만을 수행
  • Interrupt line
    • interrupt가 발생하면 OS로 CPU제어권이 넘어 옴
    • CPU에서 I/O장치를 사용할 경우 Disk Controller에 일을 시켜놓고 자기는 할 일을 마저함
    • Disk Controller는 자신의 일을 처리하고 Localbuffer에 저장시켜 놓음
    • 근데 읽은 값에 따른 일을 처리할 때, 입력이 들어올 때
    • 추가적으로 IRQ(Interrupt Request Line)라는게 있는데 컴퓨터 주변장치마다 고유의 IRQ번호를 가지고 CPU로부터 서비스를 원할 때 각 기기는 신호를 보내고 기다린다.
  • timer
    • 특정 프로그램이 CPU를 독점하는 것을 방지
    • timer에 값을 셋팅한 다음 프로그램에 CPU를 넘겨 줌
    • timer가 지나면 timer interrupt를 발생해 CPU를 사용자 프로그램에서 OS로 넘겨 받음

입출력의 수행

  • 사용자 프로그램은 어떻게 I/O를 하는가?
    1. 시스템콜 발생
    2. Trap을 사용하여 인터럽트 벡터의 특정 위치 이동
    3. 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
    4. 올바른 I/O 요청인지 확인 후 I/O 요청 수행
    5. I/O완료 시 제어권을 시스템콜 다음 명령으로 옮김
    • System call
      • 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
      • 사용자 프로그램은 직접호출을 하지 못함(mode bit = 1)
      • program이 직접 interrupt를 발생시킴, 그러면 OS로 CPU 제어권이 넘어오고 I/O실행
    • Interrupt
      • 인터럽트 당한 시점의 레지스터와 Program Counter를 저장한 후 CPU의 제어권을 인터럽트 처리 루틴에 넘김
      • Interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
      • Trap(소프트웨어 인터럽트) : Exception, System Call과 같이 SW에서 호출하는 경우
        • Exception → 프로그램이 오류를 범한 경우(divide 0)
        • System call → 프로그램이 커널 함수를 호출하는 경우
      • Interrupt Vector
        • 해당 인터럽트의 처리 루틴 주소를 가지고 있음
      • Interrupt Service Routine
        • 해당 인터럽트를 처리하는 커널 함수

현대의 운영체제는 인터럽트에 의해 구동된다

동기식 입출력과 비동기식 입출력

Untitled1

  • synchronous I/O
    • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
    • read의 경우가 많음
  • asynchronous
    • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
    • writing의 경우가 많음
  • 두가지 모두 interrupt를 통해 결과를 알려 줌

DMA

  • 작은 일 하나 하나마다 Interrupt를 발생시키면 너무 많은 CPU의 낭비를 초래함
  • 따라서 일정 크기(block)의 Interrupt가 발생하면 DMA가 묶어서 interrupt를 CPU에 발생시킴

저장장치 계층 구조

  • Register
  • Cache Memory
  • Main Memory
  • Magnetic Disk
  • Optical Disk
  • Magnetic Tape

위로 갈수록 비싸고 빠르지만 용량이 적다

Memory는 휘발성 메모리, Disk는 비휘발성 메모리

Memory는 바이트 단위 접근으로 실행 가능함

Disk는 바이트 단위가 아닌 Sector단위 접근

  • Caching : 재사용 목적으로 사용하는 것으로 하위 단계의 정보를 위 단계로 복사해놓는 것

프로그램의 실행

Untitled2

  • 실행파일 형태로 File System에 저장되어 있음
  • 프로그램을 실행시키게 되면 Address Space(주소공간)이 생기게 됨
  • 이 주소 공간은 stack/data/code 영역으로 구성되어 있음
    • code : 실행한 코드 저장
    • data : 변수
    • stack : 함수 호출/return에 사용되는 주소
  • Kernel Address Space는 OS가 부팅될 때 항상 메모리에 올려져 있음
  • 사용자 프로그램은 종료될 때 memory에 내려감
  • 메모리에 올릴 때에도 필요한 부분만 올림
  • Virtual Memory란 각 실행파일 별로 생성되는 주소공간을 의미함
  • Swap Area는 메모리의 연장공간으로 사용 됨 → 강의 후반부에 나옴
  • Virtual Memory와 실제 메모리와 매핑하는 부분도 필요함 → 강의 후반부

커널 주소공간의 내용

Untitled3

  • code
    • 시스템 콜, 인터럽트 처리 코드
    • 자원 관리를 위한 코드
    • 편리한 서비스를 제공하기 위한 코드
  • data
    • CPU, MEM, DISK를 관리하기 위한 자료구조
    • 각 Process를 관리하기 위한 Block(PCB)
  • stack
    • 사용자 프로그램이 시스템 콜을 할 때 사용되는 호출스택

사용자 프로그램이 사용하는 함수

  • 함수
    • 사용자 정의 함수
      • 자신의 프로그램에서 정의한 함수
    • 라이브러리 함수
      • 자신의 프로그램에서 정의하지 않고 가져다 쓴 함수
    • 커널 함수
      • 운영체제 프로그램의 함수
      • 커널 함수의 호출 = 시스템 콜

프로그램의 실행

Untitled4

  • 프로그램은 유저모드와 커널모드를 반복 실행하면서 프로그램을 종료함
  • 해당 그림은 A의 CPU를 소유하고 있는 경우만 나타내는 것