[OS] 1. Overview

신명철·2022년 5월 27일
0

OS

목록 보기
19/27

  • CPU : Memory의 instruction을 읽어서 처리하는 역할만 한다.
    • register: Memory보다 빠른 저장공간을 가지고 있다.
    • mode bit: instruction이 사용자 프로그램의 것인지 OS의 것인지를 구분하는데 사용된다.
      • 0 커널모드 : OS 코드 수행, 무슨 일이든지 수행할 수 있음
      • 1 사용자모드 : 사용자 프로그램 수행, 제한된 instruction만 수행할 수 있음 (e.g I/O 작업 등)
      • 보안을 해칠 수 있는 중요한 명령어는 커널모드에서만 수행 가능하고, 이런 명령어를 특권명령이라고 규정
    • Interrupt line: 원래 CPU는 Memory하고만 작업하지만, I/O device의 작용이 필요한 경우 사용된다. (e.g scanf 를 통한 키보드 입력)
      • CPU는 I/O device controller에 I/O 작업을 명령한다. 이때 CPU는 작업을 기다리지 않고 다른 작업을 진행한다. I/O device는 작업이 끝나면 local buffer에 작업 결과를 저장한다.
      • I/O device controller는 작업에 대한 결과가 들어오면 Interrupt를 보내고 자진해서 CPU 제어권을 넘겨줬던 프로그램이 다시 CPU를 넘겨받게 된다.
      • 사용자 프로그램의 I/O에 대한 접근은 보안등의 이유로 불가능하기 때문에 이를 위해서 사용자 프로그램은 스스로 CPU 제어권을 OS에게 넘겨주고 이를 OS가 대신 요청하게 된다.
    • CPU는 하나의 instruction이 끝날때마다 Interrupt line을 체크한다.
  • timer : 특정 프로그램이 CPU를 독점하는 것을 막는 역할을 한다. 세팅된 시간이 지나면 CPU에게 interrupt를 보낸다. (시분할을 위한 장치)
  • I/O device Controller : 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU, 제어 정보를 위해서 control register, status register를 갖고 있고, 일종의 data register인 local buffer를 가지고 있음
    • 제어 정보를 위한 register : CPU의 명령을 저장하는 공간
    • data register : 입출력을 위한 데이터를 저장하는 공간
    • device driver : device별 OS의 처리루틴(s/w)
  • DMA(Direct Memory Access) Controller : I/O 장치가 많아지면서 잦은 인터럽트가 CPU 작업에 방해가 됨. 이런 방해를 막기 위해 도입
    • I/O device의 Interrupt에 의한 overhead를 줄이기 위해서 DMA가 직접 local buffer의 작업 결과를 메모리에 copy 하고 CPU 에게 Interrupt를 한번만 보냄. -> Interrupt가 줄어듦

입출력의 수행

모든 입출력 명령은 특권명령임. 그렇다면 사용자 프로그램은 어떻게 I/O를 할까?

  • 시스템콜(system call) : 사용자 프로그램이 OS의 서비스를 받기 위해 커널 함수를 호출하는 것
    • 사용자 프로그램은 OS에게 I/O를 요청함
    • 프로그램이 의도적으로 interrupt line을 세팅함 -> OS로 CPU가 넘어감 -> OS가 다시 넘겨줄때 mode bit를 다시 1로 변경해서 넘겨줌
  • trap을 사용해 인터럽트 벡터의 특정 위치로 이동
  • 제어권이 인터럽트 벡터가 가키리는 인터럽트 서비스 루틴으로 이동
  • 올바른 I/O 요청인지 확인 후에 I/O를 수행
  • I/O 완료 시 제어권을 system call 다음 명령으로 옮김

인터럽트(Interrupt)

인터럽트 당한 시점의 레지스터와 Program Counter를 save하고 CPU의 제어를 인터럽트 처리 루틴에 넘긴다

  • interrupt(H/W interrupt) : 하드웨어가 발생시킨 인터럽트
  • trap(S/W interrupt)
    • Exception : 프로그램이 범한 오류
    • System call : 프로그램이 커널 함수를 호출하는 경우
  • 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
  • 인터럽트 처리 루틴(= 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수

동기/비동기 입출력

synchronous I/O

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감 -> 프로그램이 아무일도 못함
  • 구현 방법 1
    • I/O 가 끝날때까지 CPU 낭비시킴
    • 매시점 하나의 I/O만 일어날 수 있음
  • 구현 방법 2
    • I/O 가 완료될 때까지 해당 프로그램에서 CPU를 빼앗음 -> CPU와 I/O 장치 모두 놀지 않고 일을 함
    • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
    • 다른 프로그램에게 CPU 넘김

asynchronous I/O

  • I/O 시작 후 입출력이 끝나는 것을 기다리지 않고 제어가 사용자 프로그램으로 즉시 넘어감 -> 입출력이 필요없는 작업을 진행

=> 두가지 경우 모두 I/O 완료는 인터럽트로 알려줌


DMA (Direct Controll Access) controller

  • 잦은 인터럽트에 의한 오버헤드를 방지하기 위한 장치
  • 빠른 I/O device를 메모리에 가까운 속도로 처리하기 위해서 사용함
  • CPU 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송하게 된다.
  • DMA가 내용을 메모리로 copy 해두고 인터럽트를 발생시킴
  • 바이트의 단위가 아닌 block 단위로 인터럽트를 발생시킴 -> 작은 바이트에 의한 인터럽트 방지(e.g 1Byte)

저장장치의 계층구조

  • 올라갈수록 빠르고 비싸고 용량이 작아짐
  • primary : 휘발성, 바이트 단위로 접근이 가능 -> CPU 가 직접적으로 접근할 수 있음
  • secondary : 비휘발성, sector 단위로 접근 가능 -> CPU 가 직접적으로 접근할 수 없음

프로그램 실행 (메모리 load)

  • 파일을 실행시키면 프로세스는 가상 메모리에 독자적인 주소 공간을 할당받게 됨 -> 각 프로그램마다 독자적인 공간을 가지고 있는 것을 virtual memory라고 부름.
  • 실제 물리적 메모리에는 프로세스의 중요한 부분만 올림
  • 중요하지 않은 부분은 swap area에 내려감 -> swap area는 전원이 나가면 내용이 사라짐, 메모리의 연장 공간으로 사용함

커널 주소 공간

  • code,data,stack 으로 구성되어 있음
  • h/w 를 종류마다 자료구조를 만들어서 관리함
  • process를 관리하기 위한 PCB라는 자료구조를 만들어서 관리함

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

  1. 사용자 정의 함수
    • 자신의 프로그램에서 정의한 함수
    • process의 code 영역에서 사용
  2. 라이브러리 함수
    • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 자신의 프로그램의 실행 파일에 포함되어 있음
    • process의 code 영역에서 사용
  3. 커널 함수
    • 운영체제 프로그램의 함수
    • 커널 함수의 호출은 시스템 콜을 통해서 호출함
    • kernel의 code 영역에 접근해야 함 -> system call 을 통한 interrupt line 세팅 필요

출처 : http://www.kocw.net/home/search/kemView.do?kemId=1046323

profile
내 머릿속 지우개

0개의 댓글