운영체제

[운영체제] 컴퓨터는 3층집이다

wjdwwidz 2024. 6. 28. 14:25

컴퓨터를 이루는 요소 2가지는 H/W와 S/W고 S/W는 다시 Kernel과 Application으로 나뉩니다.

모든 것이 여기서 시작됩니다.

printf() 와 같은 API 의 역할도 더 깊이 생각해봅니다.

https://youtu.be/M9ZrQX1UgAU?si=Wzjak3XNqVsNm3lO

 


현재의 모든 운영체제는 멀티프로세싱 시스템. 즉 멀티태스킹. 그렇기 때문에 한 컴퓨터에서 프로레스 여러 개가 작동하는데, 이것을 잘 관리하는 것이 운영체제의 역할이며, 나쁜 일을 안 당하도록 하는 것도 운영체제의 몫. 

 

Interrupt

운영체제를 이해하기 위해 하드웨어 부분에 대한 이해가 먼저 필요하다. 

 

띵동~ , 나라는 사람이 CUP 라고 하면, 나를 방해하는 요소가 인터럽트.

컴퓨터라고 하는 기계(CPU) 가 있고, 이 기계와 주변기기라고 하는 것들이 붙어 작동하게 되는데, 주변기기와 컴퓨터가 통신을 할 때 (입출력I/O를 할 때) 여러가지 입출력 매커니즘이 적용되고,그럴 때마다 인터럽트가 발생된다. 그래서 컴퓨터가 어떤 일을 하면서 지내다가(혹은 다른 것을 진행하다가), 인터럽트가 오면 대기하고, 다시 인터럽트가 오면 다시 원상태로 돌아간다.( 혹은 원래 하던 다른 것을 진행)

즉, CPU 가 주변기기와 통신할 때마다 인터럽트가 발생한다. 

 

하드웨어에 대해 얼마나 알아야 하냐 ? 인터럽트가 발생한다는 것을 일단 알아두자. 

 

Interrupt 가 일어나는 과정

C언어 기준으로, printf 를 작성하여 "Hello World"를 작성했고, 이것이 화면에 출력되었다고 치자. 

이것은 내가 Video 디바이스 (주변기기 중 모니터) 를 제어 했다는 것이다. (정확히는 OS가 제어)

 

이 과정은 어떻게 일어날까?  

 

우선 API 어플리케이션 프로그래밍 인터페이스 중 printf라는 함수를 이용해 call 한다. 

API 내부에서는 어떤 장치를 추상화한 interface를 통해서 정보가 (App -> user -> Kernel -> HW 단계로) 아래로 내려간다. 

system call

API 를 거쳐 구성요소(user 와 Kernel이 맞닿아 있는 단) 에게 이 신호를 보낼 때, 라인이 user에서 Kernel 바뀌는데, 커널로 진입하면 어떤 새로운 코드가 실행 된다. 이 진입점에 있는 코드를 system call이라고 한다.

 

시스템콜 중에서도 printf를 썼으니,  ~~write() 함수가 system call, 즉 커널 수준에서 작동했을 것이다. 커널을 움직인 게 아니라, API 를 통해서 system call 이 이루어지도록 한 것이다. 그럼 이 때 커널 수준에서 구성요소 가 작동하고, system call이 이루어지면서, devcie driver를 제어하기 시작한다. 

 

Interrupt request : IRQ

컴퓨터라는 것은 결국 CPU 인데, 디바이스 내부에서 인터럽트를 요청한다.

이 인터럽트가 발생하면서 CPU 는 잠깐 device장치와 통신을 하게 된다.

장치에게 'hello world를 찍을거야 !' 하면 장치에 변화가 생기면서, 주변기기 중 video 는 모니터를 제어한다.

이 IRQ는 고유 번호를 가지며, 장치자마 다르다. (ex) keytboard : 1 번, sound card : 5번 등등 ) 

 

 

출력 이후

출력이 끝나면 이 장치는 다시 인터럽트를 발생시켜 출력이 끝났다는 인터럽트를 보내고, 되돌아 왔던 길을 따라, system call에서 다시 process에 끝났단 말을 보낸다. (함수를 리턴한다) 

이 때 process가 이 모든 과정이 끝날 때까지 기다린다면, 이 모든 입출력은 blocking IO 가 되는 것이고, 해주세요 하고 끝나면 non blocking IO 가 되는 것. 즉 블로킹/논블로킹은 API 를 호출하는 과정에서, 자신의 상태가 어떻게 되느냐를 기준으로 판단하게 된다. 

 

 

 

요약 

  1. Interrupt 
  2. Interrupt 를 요구, 요청하는 것을 : IRQ (Interrupt Request) 라고 한다. 
  3. IRQ 는 번호를 가진다. 
  4. Interrupt는 왜 발생하는가 ? 컴퓨터(CPU)가 주변기기와 정보 통신 할 때 주로 발생한다. 
  5. Printf 등을 API 라고 하며, API는 내부적으로 커널 영역에서 실질적인 오퍼레이션이 수행되도록 , 즉 입출력이 일어나도록 역할하는데, 그 때 실행되는 함수를 system call이라 한다. 
  6. 즉 입출력이 일어나도록 하는 함수를 System call이라 하는 것. 

 


시스템 내부에서 주변기기들과 입출력(통신을 한다) 는 말그대로 입출력이다. 읽던지, 쓰던지. 모든 입출력의 본질은 읽고 쓰기라는 것을 알아두자 !