ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2일차-System Structure & Program Execution
    CS지식/운영체제 2021. 4. 7. 22:02

    오늘은 컴퓨터 내부에서 사용자 프로그램이 동작할 때 흐름의 전반적인 모습을 배웠다.

    세부적으로 들어가면 매우 어려운 내용이지만 교수님이 설명을 하시면서 예를 들어주고 이해가 잘 되도록 해주기 때문에 큰 그림으로 봤을 때는 어떠한 느낌인지는 알았다.

     

    1. 컴퓨터 시스템 구조

    컴퓨터는 CPU와 메모리로 구성되어있다. 메모리에 쌓여있는 운영체제, 사용자 프로그램을 정해진 스케쥴링에 따라 CPU는 가져와서 일을 하게 된다.

    이렇게 보면 간단해보이지만 더 자세히 들어가면 많은 것들이 존재한다.

    먼저, CPU 내부부터 살펴보겠다.

    - register: 메모리보다 빠르면서 정보저장이 가능한 공간

    - mode bit: cpu에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분

    (1: 사용자 프로그램 수행, 0: OS코드 수행)

    - interrupt line: CPU는 항상 메모리에 있는 instruction만 수행하는데 타이머나 device controller에서 필요한 것을 CPU에 요청할 경우 interrupt를 이용한다.

    (device controller는 I/O 디바이스를 전담하는 작은 CPU라고 생각하면 된다. 즉, I/O 디바이스는 CPU가 직접적으로 접근이 불가능하다.)

     

    그리고 CPU와 메모리 이외에 DMA controller와 timer가 존재한다. 이 두 가지 하드웨어의 역할을 알아보자.

     

    - DMA controller

    DMA는 Direct Memory Controller의 약자로 말그대로 메모리를 직접적으로 컨트롤할 수 있는 것이다.

    원래는 메모리에 접근가능한 것은 CPU 뿐이였다.

    그러면 DMA controller는 왜 필요할까?

    먼저, DMA controller가 없을 때를 가정해보자. CPU는 빠르게 일처리를 수행하는 것이 특징인데 이 CPU에 타이머나 여러 I/O 장치들이 interrupt를 걸어오면 CPU는 일을 멈추게 되는 경우가 많아진다.

    이러한 부담을 줄이기 위해 DMA controller가 CPU의 역할을 분담해주는 것이다.

    그러면 어떠한 일을 분담해주냐?

    I/O device에 있는 local buffer에서 메모리로 복사해주는 역할을 하게 된다.

    (local buffer는 device controller의 작업공간으로 I/O device가 처리해야할 일이나 처리완료된 일을 저장하는 공간이다.)

     

    - timer

    타이머는 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시키는 역할을 한다.

    이러한 역할을 하는 타이머는 왜 필요할까?

    만약, 사용자 프로그램1이 CPU에서 처리되고 있는데 이 사용자 프로그램1이 독점적으로 CPU를 오랜기간동안 사용하게 된다면 매우 비효율적일 것이다.

    그래서 일정 시간을 정해두어 그 시간이 지나면 다음 instruction이 실행될 수 있도록 설정해주는 것이다.

     

    이제 더 자세히 예를 들어 설명하면서 필요한 개념들을 정리해 보겠다.

     

    예1) 사용자 프로그램이 실행되면서 키보드를 통해 입력값을 받아야하거나 모니터에 출력을 하라는 명령이 있다. 그러면 어떻게 동작이 될까?

     

    먼저, CPU는 사용자 프로그램으로 동작하고 있으므로 mode bit는 1이 되고 앞에서 말했듯이 사용자 프로그램은 I/O 디바이스에 직접적으로 명령이나 접근할 권한이 없다.

     

    그러면 어떻게 해야할까?

    운영체제가 일을 해야한다. 운영체제는 I/O 디바이스에 부착된 device controller에게 명령을 내릴 수 있다.

    먼저, 사용자 프로그램은 운영체제에게 I/O요청을 해야하는데 이 과정을 시스템콜(system call)이라 한다.

    시스템 콜은 사용자 프로그램이 CPU에게 인터럽트(interrupt)를 발생시켜 작업을 중단시키고 운영체제로 넘기게 한다. 그러면 mode bit는 0으로 바뀌고 비로소 운영체제가 I/O요청이 가능해진다.

     

    ==> 여기서 배운 2가지

    1. 시스템콜(system call)

    2. 사용자 프로그램도 CPU에게 interrupt를 걸 수 있다.

     

     

    마지막으로, 인터럽트(interrupt)에 대한 개념을 더 정리해보려고 한다.

    위에서 interrupt를 거는 경우가 꽤 있었다. 타이머가 걸 수도 있고 디바이스 컨트롤러가 걸 수도 있고 사용자 프로그램이 걸 수도 있다. 그래서 인터럽트(interrput)를 넓은 의미로 보면 2가지로 나뉜다.

     

    1. 하드웨어 인터럽트

    하드웨어 인터럽트는 하드웨어가 발생시킨 인터럽트로 보통 인터럽트라고 하면 하드웨어 인터럽트를 말하는 것이다.

    여기서 말하는 하드웨어는 타이머, 디바이스 컨트롤러, DMA 컨트롤러 등이 있다.

     

    2. trap

    트랩은 소프트웨어 인터럽트로 Exception과 system call로 나뉜다.

    Exception은 프로그램이 오류를 범한 경우, System call은 프로그램이 커널함수를 호출하는 경우를 의미한다.

     

     

    그리고 인터럽트와 같이 알아두면 좋은 개념 2가지가 있다.

     

    1. 인터럽트벡터

    해당 인터럽트의 처리루틴 주소를 가지고 있는 것이다.

    예를 들어, 키보드에서 인터럽트를 발생시켰다면 CPU에 3번 인터럽트가 발생했다고 왔을 것이다.

    그러면 3번 인터럽트는 어떻게 해결해하는지에 대한 인터럽트처리루틴의 주소를 가리키는 정보를 담고 있는 것이 인터럽트벡터이다.

     

    2. 인터럽트처리루틴

    해당 인터럽트를 처리하는 커널함수이다.

     

     

    'CS지식 > 운영체제' 카테고리의 다른 글

    6일차 - CPU Scheduling  (0) 2021.04.21
    5일차 - 프로세스 관리(Process Management)  (0) 2021.04.18
    4일차 - 스레드(Thread)  (0) 2021.04.15
    3일차 - 프로세스(Process)  (0) 2021.04.13
    1일차-운영체제란?  (0) 2021.04.03

    댓글

Designed by Tistory.