운영체제 - System Structure & Program Execution

송은석·2022년 6월 22일
0

KOCW 사이트를 이용하여 듣게 된 반효경 교수님의 운영체제 강의 내용을 간단히 정리하여 포스팅합니다.

컴퓨터 시스템 구조

*device controller는 각 io device들의 cpu 역할을 하며 device들을 컨트롤하고, local buffer를 메모리처럼 사용한다.

  • cpu는 매 클럭마다 메모리에서 instruction을 읽어서 실행하고, 실행 완료 시 프로그램 카운터 레지스터의 주소 값을 증가시킨 후 다음 instruction을 찾아 실행한다.

  • register → cpu에서 임시 정보들을 저장하는 공간

  • mode bit. → cpu 안에서 현재 실행되는 instruction이 운영체제 or 사용자 프로그램 중 어디로부터 왔는지 구별해준다.

  • interrupt line → cpu가 현재 instruction을 실행 완료하고 kernel mode로 전환하게 끔 만들어 device들의 io 작업을 수행하도록 한다.
    만약, 중간에 io작업도 없이 무한 루프를 도는 프로그램이 있다면? 계속해서 cpu를 독점하여 사용하게 된다. 이는 cpu의 time sharing을 구현하지 못하도록 만든다. 이처럼 특정 프로그램이 cpu를 독점하는 것을 막기 위해, timer가 사용된다.


Timer

  • 처음 cpu가 켜졌을 때는 운영체제가 cpu를 가지고 있다가, 사용자 프로그램이 시작되면 cpu를 넘겨주게 된다. 이때, timer에 해당 프로그램에 대한 세팅을 하고 넘겨준다. 그러면 사용자 프로그램이 cpu를 통해 instruction을 실행되다가도, 맞추어둔 timer 세팅 시간이 완료되면 timer가 interrupt를 걸어오고, cpu의 제어권이 사용자 프로그램에서 운영체제로 넘어간다.

  • (timer 없이 interrupt를 발생시키는 경우) 사용자 프로그램이 io가 필요하면, 스스로 운영체제에 cpu를 넘겨준다. 그러면 운영체제가 io작업을 device controller에 맡기고, 그동안 cpu는 다른 instruction을 실행하게 된다.

    ex) 만약 사용자 프로그램이 키보드에서 io를 받으려고 한다면 다음 순서로 입력을 받게 된다. 1. 사용자가 키보드 입력을 완료하고, 2. 키보드 컨트롤러가 input을 완료하고, 3.cpu에 interrupt를 건다. 4. cpu는 아까의 작업을 기억하고(pcb를 통함), input 내용을 copy하고, 해당하는 프로그램의 할당된 시간이 남았으면 제어권을 주거나, 시간이 다 되었으면 언젠가 해당 프로그램의 차례가 되었을 때 제어권을 준다.


Mode bit

  • mode bit ⇒ 사용자 프로그램에 대한 프로그램 및 운영 체제의 보호를 위함.
    • mode bit 0 → 모니터(커널) 모드
      • 무슨 일이든 할 수 있다. 메모리 접근 뿐 아니라, io에도 접근할 수 있다.
      • 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 특권 명령으로 규정한다.
      • interrupt나 exception 발생 시 mode bit은 0으로 변경된다.
    • mode bit 1 → 사용자 모드
      • 제한된 instruction만 cpu에서 실행된다. 보안 상의 목적이 크다.

Device controller

  • 제어 정보를 위한 register란, cpu가 device controller에게 일을 시킬 때 사용되는 register를 뜻한다.
  • local buffer은 device에서 담은 데이터를 memory에 넘기거나 데이터를 화면에 담아 출력할 때 사용 된다.
  • -> 어떤 데이터를 file에 저장하고 싶으면 데이터 자체는 local buffer에 넣고, 데이터를 저장하라는 명령은 register를 통해서 cpu가 io 컨트롤러를 통해 전달하게 된다.

DMA(Direct memory access)controller

메모리를 전담하는 컨트롤러
  • main 메모리는 원칙적으로는 cpu만 접근할 수 있게 해놓았다. io device들은 local buffer에 저장하고, 쌓이면 cpu의 register에 저장한다. cpu는 메모리와 local buffer에 둘 다 접근할 수 있다.
  • 그러다 보니까 cpu는 너무 interrupt를 많이 당한다. cpu 일하려고 하면 io device가 계속 interrupt를 걸게 된다. 그래서 DMA controller를 둔다.( 직접 메모리에 접근할 수 있는 컨트롤러. 메모리를 cpu와 dma 둘 다 접근 가능. 그런데 둘 다 접근하면 문제 발생할 수 있음 ⇒ 메모리 컨트롤러가 이를 제어한다.
  • dma의 역할은 io device의 interrupt가 왔을 때 모두 cpu에 가면 오버헤드가 크므로, dma가 이를 복사하여 메모리에 저장시키고, 메모리가 한 번만 interrupt를 걸어 적은 cpu 간섭이 일어나도록 하는 것이다.

관련용어

  • device driver(장치 구동기): os 코드 중 각 장치 별 처리 루틴 → software
    • 운영체제의 코드에서 device에 대한 코드가 있는데, 이에 맞게 코드를 제공. device를 붙이면, 운영체제에서 접근할 수 있도록 하는 소프트웨어. os에 설치.
      - device controller(장치 제어기): 각 장치를 통제하는 일종의 작은 cpu → hardware

Cpu의 instruction 실행 과정

  • cpu는 실행해야 할 instruction의 메모리 주소를 register 중에서 프로그램 카운터라는 레지스터로부터 가져와 instruction를 실행한다.
  • 그리고 그 instruction중에서 io 장비에 접근해야 하는 것이 있으면 디바이스 드라이버를 통해서 읽도록 하는 명령을 내린다. 드라이버가 직접 디바이스를 읽게 하는 코드는 아니다. 디바이스가 동작하도록 하는 코드는 펌웨어다.
  • 디바이스 드라이버는 cpu가 실행하는데 필요한 코드를 갖고 있는 것이다.
  • cpu는 직접 일을 할 수 없고, 메뉴얼 대로 일을 한다. 메모리 몇 번지에 일을 하라고 하면 하고, 그 다음 메뉴얼에 있는 일을 한다. 스스로 x.
  • 그리고 이에 대한 전체적인 통제를 운영체제가 하는 것이다.

입출력(io)의 수행

  • 모든 입출력 명령은 특권 명령
  • 사용자 프로그램은 어떻게 io를 하는가?
    • 운영체제에 부탁 | 시스템 콜
    • 프로그램이 직접 interrupt line에 interrupt를 보냄 -> cpu 제어권이 운영체제로 넘어가고, disk controller에 부탁할 수 있게 된다.
  • 하드웨어 device들이 cpu한테 정보교신을 위해 interrupt를 걸 수도 있고, 사용자 프로그램이 diskio를 위해 운영체제에 요청하기 위해 interrupt line를 세팅하여 운영체제로 넘길 수도 있다. 후자가 소프트웨어 인터럽트, trap이라고 한다. 일반적으로 인터럽트라고 하면 하드웨어가 거는 인터럽트를 말한다. 넓은 의미는 둘 다 포함.
  • 시스템 콜 → trap을 사용하여 인터럽트로 특정 주소로 cpu 실행을 옮김.
  • 올바른 요청일 경우 io컨트롤러는 일을 한다. 그리고 io가 끝났을 때, 하드웨어가 일 다 끝냈다고 인터럽트를 건다.

  • io 요청을 할 때는 → 소프트웨어 인터럽트
    io가 다 끝났으면 → 하드웨어 인터럽트

  • 프로그램 끝 → timer
    io 끝 → device controller

관련 용어

  • 인터럽트 벡터
    • 해당 인터럽트의 처리 루틴 주소를 가지고 있음.
  • 인터럽트 처리 루틴
    • 각각의 인터럽트마다 해야 할 일은 다를 것. 각각의 인터럽트 마다 해야 할 일이 운영체제에 정의되어 있음. 그러한 코드를 인터럽트 처리 루틴이라고 한다. 그리고 그 인터럽트 처리 루틴이 저장된 함수의 주소가 인터럽트 벡터에 적혀져 있다.

참고

강의 | 운영체제(2014, 이화여대), 반효경
profile
Done is better than perfect🔥

0개의 댓글