[운영체제] Chapter 2. System Structure & Program Execution 1, 2

조희연·2022년 1월 3일
0

Study

목록 보기
3/15
post-thumbnail

강의 주소 : 이화여대 반효경 교수님 운영체제 강의 (2014년)

Chapter 2. System Structure & Program Execution 1, 2

2.1 컴퓨터 시스템 구조



CPU
매 클럭 사이클마다 Memory의 instruction을 읽어 실행

  • mode bit : 사용자 모드(1)와 OS 모드(0)로 구분
    • 보안상의 목적으로 사용자 모드일 경우 한정된 instruction만 실행
    • interrupt나 exception 발생 시 하드웨어가 mode bit을 0으로 바꿈
    • 사용자 프로그램에게 CPU를 넘기기 전에는 mode bit을 1로 셋팅
  • interrupt line : CPU와 I/O 장치가 통신할 때 사용
    • HW interrupt : HW가 발생시킨 인터럽트
    • SW interrupt(trap) : System call, Exception
    • 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
    • 인터럽트 처리 루틴 : 해당 인터럽트를 처리하는 커널 함수
  • 하나의 명령이 끝날 때마다 interrupt line을 체크한다. 인터럽트가 들어오면 하던 일을 멈추고 CPU의 제어권이 OS에게 넘어간다. OS는 인터럽트 벡터를 확인해 인터럽트 처리 루틴을 실행한다.

I/O device

  • 각각의 CPU(device controller)와 Memory(local buffer)를 가지고 있음
  • device controller : 해당 I/O 장치유형을 관리하는 일종의 작은 CPU로 제어 정보를 위해 control register, status register를 가짐 -> hardware
  • device driver : OS 코드 중 각 장치별 처리루틴 -> software

timer

  • 특정 프로그램이 CPU를 독점하는 것 방지
  • 사용자 프로그램이 CPU를 사용하던 중 timer에 셋팅된 시간이 끝나면 CPU에 interrupt를 걸어 제어권이 사용자 프로그램에서 OS로 넘어가도록
  • time sharing을 구현하기 위해 이용

DMA controller

  • I/O device의 interrupt가 자주 발생함으로 인한 CPU의 효율성 저하를 방지하기 위해 DMA controller가 직접 local buffer의 메모리를 Memory로 복사
  • CPU만 Memory에 접근할 수 있었지만, DMA controller도 접근 가능

2.2 인터럽트


Interrupt(HW 인터럽트)
하드웨어가 발생시킨 인터럽트

Trap(SW 인터럽트)

  • Exception : 프로그램이 오류를 범한 경우
  • System call : 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것

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

2.3 입출력(I/O)의 수행


사용자 프로그램은 어떻게 I/O를 하는가?
1. 시스템 콜(System call) : 사용자 프로그램이 OS에 I/O 요청
2. trap을 사용해 인터럽트 벡터(해당 인터럽트의 처리 루틴 주소를 가지고 있음)의 특정 위치로 이동
3. 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴(해당 인터럽트를 처리하는 커널 함수)으로 이동
4. 올바른 I/O 요청인지 확인 후 I/O 수행
5. I/O 완료 시 제어권을 시스템 콜 다음 명령으로 옮김

2.4 동기식 입출력 & 비동기식 입출력



동기식 입출력(synchronous I/O)

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에게 넘어감
  • 구현 방법 1.
    • I/O가 끝날 때까지 CPU를 낭비시킴
    • 매시점 하나의 I/O만 일어날 수 있음
  • 구현 방법 2. 당장 일을 할 수 있는 프로세스에게 CPU를 넘겨주는 것
    • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
    • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
    • 다른 프로그램에게 CPU를 줌

비동기식 입출력(asynchronous I/O)

  • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감

-> 두 경우 모두 I/O의 완료는 인터럽트로 알려준다.

2.5 DMA(Direct Memory Access)


  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • 바이트 단위가 아닌 block 단위로 인터럽트를 발생시킴

2.6 서로 다른 입출력 명령어



좌) I/O를 수행하는 special instruction에 의해
우) Memory Mapped I/O에 의해 : I/O 장치도 메모리 주소의 연장으로 접근

2.7 저장장치 계층 구조


위로 갈 수록 용량이 적고 속도가 빠르며 휘발성 매체(초록색 부분)

  • primary : CPU가 직접 접근 O
  • secondary : CPU가 직접 접근 X

2.8 프로그램 실행


  • 프로그램은 실행파일 형태로 File system에 저장되어 있다.
  • 프로그램을 실행시키면 각각 독자적인 주소 공간(stack, data, code)이 생긴다.
  • Physical memory에 필요한 부분만 올려 사용하며 당장 필요하지 않은 부분은 Swap area에 내려놓음

ex) A 프로그램의 실행 과정

2.9 커널 주소 공간의 내용


  • code : 자원 관리를 위한 코드, 편리한 서비스 제공을 위한 코드, 시스템 콜/인터럽트 처리 코드
  • data : 운영체제가 사용하는 자료구조(data, mem, disk), 각 프로그램을 관리하기 위한 자료구조(PCB)
  • stack : 사용자 프로그램마다 커널 스택을 따로 두고 있음

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


모든 프로그램은 함수 형태로 짜여 있다.

  • 사용자 정의 함수 : 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수, 자신의 프로그램 실행 파일에 포함되어 있음
  • 커널 함수 : OS 프로그램의 함수, 커널 함수 호출 = 시스템 콜
profile
Software Engineer

0개의 댓글