운영체제 - 컴퓨터 시스템 구조

WooHyeong·2022년 11월 29일
0

OS(Operating System)

목록 보기
2/7

cs 공부를 어떻게 시작할까 하다가 이화여대 반효경 교수님의 운영체제 강의로 cs준비를 했다는 글을 보고 수강하게 되었다.
이화여대 반효경교수님 운영체제 해당 강좌를 여름부터 듣긴 했는데, 강의 3개를 못벗어난다. 강의 자료가 없다는 점이 정리하기가 불편했다. 거기다 강의 너무 졸려서 완강을 못한다...

그렇지만 다시 들어야지... 책 혼자 보는 것보단 강의 보는 게 나을 것 같고, 강의 자료 없는건 그냥 내용 다 필기해서 정리하려고 한다.

첫 강의만 3번은 들었는데, 다시 또 들었고, 오늘부터 운영체제 정리 간다~!

컴퓨터 시스템 구조

운영체제를 설명하기에 앞서서 컴퓨터 하드웨어 적인 것을 설명하는 챕터이다. 본격적인 강의에 들어가기 전에 전체 흐름을 짚고 간다.

컴퓨터 시스템은 크게 cpu와 메모리 I/O device로 구성되어 있다.

CPU

  • cpu와 I/O device 의 처리하는 속도 차이가 많이 난다. disk만 해도 cpu에 비해 백만배 정도 느리다.

  • cpu는 매 쿨럭마다 메모리에서 인스트럭션을 하나씩 읽어서 처리하는 작업을 반복한다.

Register : cpu안에 있고, 메모리보다 더 빠르면서 정보를 저장할 수 있다.
Mode bit : 현재 cpu에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분해준다.
Interrupt Line : cpu는 항상 메모리에 있는 인스트럭션만 실행한다. 키보드 입력, 화면 출력, 디스크 입출력.
cpu는 I/O device에 직접 접근하지 않고, 게속 메모리에 접근해서 메모리에 있는 인스트럭션만 실행한다.
Timer : 특정 프로그램이 cpu를 독점하는 것을 막기 위한 것

메모리

cpu의 작업 공간

I/O Device

  • Input Device : 컴퓨터 내부로 데이터를 입력하는 장치 (Ex. 키보드, 마우스)
  • Output Device : 처리결과를 내보낸다. (Ex. 프린터, 모니터)
  • Hard Disk : 보조장치지만, I/O device 라고도 볼 수 있다. 하드 디스크의 data를 읽어서 메모리로 읽어들이기도 하고 (Input Device 역할), 처리 결과를 disk의 파일 시스템에 저장하기도 한다. (Output Device로의 역할)
  • Device Controller : I/O device를 전담하는 작은 cpu
  • Local Buffer : cpu의 작업 공간으로 메인메모리가 있듯이, I/O device의 작업공간이다.

Timer

  • 타이머
    • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킨다.
    • 타이머는 매 쿨럭 틱 때마다 1씩 감소
    • 타이머는 값이 0이 되면 타이머 인터럽트 발생
    • CPU를 특정 프로그램이 독점하는 것으로부터 보호
  • 타이머는 time sharing을 구현하기 위해 널리 이용된다.
  • 타이머는 현재 시간을 계산하기 위해서도 사용한다.

특정 프로그램이 cpu를 독점하는 것을 막기 위해서 운영체제가 사용자 프로그램한테 cpu를 넘겨줄 때는 타이머에다가 정해진 시간을 할당한 뒤에 넘겨준다.
타이머의 세팅된 시간이 쭉 지나서 0이 되면 인터럽트를 걸어서 프로그램으로 부터 cpu를 뺏을 수 있게 구현한 것이다.

Device Controller

  • I/O device controller
    • 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
    • 제어 정보를 위해 control register, status register를 갖는다.
    • local buffer를 갖는다. (일종의 data register)
  • I/O는 실제 device와 local buffer 사이에서 일어남
  • Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알린다.

device driver (장치 구동기) :
OS 코드 중 각 장치별 처리루틴 -> software

device controller (장치 제어기) :
각 장치를 통제하는 일종의 작은 CPU -> hardware

I/O device Controller는 I/O 장치를 전담하는 일종의 작은 CPU이다.


CPU 연산과 I/O 연산

입출력 장치들의 I/O 연산은 입출력 컨트롤러가 담당하고, 컴퓨터 내에서 수행되는 연산은 메인 CPU가 담당한다.

  • 로컬 버퍼(Local buffer) : 각 장치 컨트롤러가 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리
    • 디스크나 키보드 등에서 데이터를 읽어오는 경우, 로컬버퍼에 데이터가 임시 저장된 후 메모리에 전달된다. 장치에서 로컬버퍼로 읽어오는 일은 컨트롤러가 담당한다.
    • 로컬 버퍼로 읽어오는 작업이 끝났는지는 장치 컨트롤러가 인터럽트를 발생시켜 CPU에 알려준다.
  • 인터럽트(Interrupt) : 컨트롤러들이 CPU의 서비스가 필요할 때 통보하는 방법

인터럽트 (Interrupt)

  • 인터럽트는 키보드 입력 혹은 요청된 디스크 입출력 작업의 완료 등 CPU에 알려줄 필요가 있는 이벤트가 일어난 경우 컨트롤러가 발생시키는 것이다.

  • CPU는 매 시점(쿨럭)마다 메모리에서 명령(instruction)을 하나씩 읽어와서 수행한다. 이때 CPU 옆에는 인터럽트 라인 이 있어서, CPU가 자신의 작업을 하던 중간에 인터럽트 라인에 신호가 들어오면 하던 일을 멈추고, 인터럽트와 관련된 일을 먼저 처리한다.

  • 인터럽트의 일반적 기능

    • 프로그램이 요청한 데이터를 장치 컨트롤러가 로컬버퍼로 읽어온 후 인터럽트를 발생시키면 CPU는 인터럽트가 들어온 것을 인지하고 인터럽트 관련 업무를 수행한다.
    • 인터럽트 처리 루틴은 운영체제 커널 내에 정의되어 있다.
    • 운영체제는 할 일을 쉽게 찾아가기 위해 인터럽트 벡터(interrupt vector)를 가지고 있다.
    • 인터럽트 벡터 : 인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야 할 코드가 있는 자료구조
    • 실제 처리해야하는 코드는 인터럽트 처리루틴 또는 인터럽트 핸들러라고 불리는 다른 곳에 정의된다.

인터럽트라고 하면 통상적으로 하드웨어 인터럽트를 의미하고, 소프트웨어 인터럽트는 트랩(trap)이라는 용어로 주로 불린다.
소프트웨어 인터럽트 = 트랩(trap)
ex) 예외상황(exception), 시스템 콜(system call)

시스템 콜 : 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스를 요청하는 방법

사용자 프로그램에 정의되지 않고 운영체제 커널에 있는 코드를 사용자 프로그램이 실행하고자 할 때에는 인터럽트 라인 세팅을 통해 CPU 제어권을 운영체제로 넘겨 실행하게 되는 것이다.

시스템콜 이나 예외상황 은 모두 사용자 프로세스로부터 CPU의 제어권이 운영체제에 이양되어 처리되는데, 이 과정에서 프로그램 코드가 직접 인터럽트 라인을 세팅하는 명령을 실행하여 인터럽트를 발생시킨 후에 제어권이 넘어가게 되므로 이들도 넓은 의미에서는 인터럽트의 범주에 포함시킨다.

인터럽트 핸들링(Interrupt handling)

  • 인터럽트 핸들링이란 인터럽트가 발생한 경우에 처리해야 할 일의 절차를 의미한다.
  • CPU에서 명령이 실행될 때에는 CPU 내부에 있는 임시 기억장치인 레지스터에 데이터를 읽거나 쓰면서 작업을 한다. 인터럽트가 발생하면 기존의 레지스터의 값들이 지워지므로 CPU 내의 이러한 상태를 저장해두어야 한다. 저장이 이뤄진 후에 인터럽트 처리가 이루어질 수 있다.

프로세스 제어 블록 (PCB : Process Control Block)

  • 운영체제가 현재 시스템 내에서 실행되는 프로그램들을 관리하기 위한 자료구조
  • PCB는 각각의 프로그램마다 하나씩 존재하며 해당 프로그램의 어느 부분이 실행 중이었는지를 저장하고 있다.
    구체적으로는 프로그램이 실행 중이던 코드의 메모리 주소와 레지스터 값, 하드웨어 상태 등이 저장된다.

예를 들어, 프로그램이 실행되던 중에 인터럽트가 발생하면 그 프로그램의 실행 상태를 PCB에 저장한 후 CPU의 제어권이 인터럽트 처리루틴으로 넘어가게 되며, 인터럽트 처리가 끝나면 저장된 상태를 PCB로부터 CPU상에 복원해 인터럽트 당하기 직전의 위치부터 실행이 이어지게 되는 것이다.


하드웨어의 보안

모든 입출력 명령은 *특권 명령으로 규정해서 사용자 프로그램이 직접 입출력을 하는 것을 차단한다.

*특권명령 : 시스템의 보안과 관련된 명령

Mode bit

사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치

Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원

1 사용자 모드 : 사용자 프로그램 수행, 제한적인 명령만 수행할 수 있다.
0 모니터 모드(커널 모드) : 운영체제가 CPU 제어권을 갖고 운영체제 코드를 실행하는 모드

CPU가 보안과 관련된 명령을 수행하기 위해서는 항상 Mode bit이 0인 경우에만 수행한다.
그리고 운영체제가 CPU를 점유해 자신의 코드를 수행하다가 사용자 프로그램에게 CPU의 제어권을 넘길 때 Mode bit을 1로 세팅한다.

  • 보안을 해칠 수 있는 중요한 명령어는 커널 모드에서만 수행 가능한 '특권 명령'으로 규정. 특권 명령은 Mode bit이 0일 때만 수행 가능

  • Interrupt나 Exception 발생시 하드웨어가 mode bit을 0으로 바꿈

  • 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅

사용자 프로그램은 수행되다가 하드웨어 접근 등 보안이 필요한 중요한 명령을 수행해야할 경우에는 시스템 콜을 통해 운영체제가 대신해줄 것을 요청한다.

인터럽트가 발생할 때 Mode bit은 자동으로 0이 세팅되므로 운영체제는 서비스에 필요한 모든 종류의 명령을 다 수행할 수 있다.

요청된 작업이 모두 끝난 후에는 Mode bit을 1로 만들어 사용자 프로그램에게 CPU를 넘겨준다.

★사용자 프로그램은 보안과 관련된 중요한 명령의 수행에 제약을 받게 되기 때문에 하드웨어를 보호할 수 있다.


인터럽트(Interrupt)

  • 인터럽트
    • 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
  • Interrupt (넓은 의미)
    • Interrupt (하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
    • Trap (소프트웨어 인터럽트) :
      • Exception : 프로그램이 오류를 범한 경우
      • System Call : 프로그램이 커널 함수를 호출하는 경우
  • 인터럽트 관련 용어
    • 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음
    • 인터럽트 처리 루틴 : 해당 인터럽트를 처리하는 커널 함수

하드웨어 일꾼들이 cpu한테 정보 교신을 하기 위해서 걸어줄 수 있고, 사용자 프로그램이 실행되다가 운영체제한테 처리 요청을 해야되는 상황에서도 인터럽트 라인을 세팅해서 os가 cpu한테 넘어갈 수 있다.


현대의 운영체제는 인터럽트에 의해 구동된다.
즉, 운영체제는 cpu를 사용할 일이 거의 없고, 인터럽트가 들어올 때만 cpu가 운영체제한테 넘어간다. 그렇지 않으면 CPU는 항상 사용자 프로그램이 쓰고 있다.

본 포스팅은 이화여대 반효경교수님 운영체제 강의를 바탕으로 작성하였습니다.

profile
화이링~!

0개의 댓글