[CS] 운영체제와 하드웨어의 작동원리에 대한 나름의 이해

2023. 10. 11. 20:28CS

cpu, memory, I/o device 간에 어떻게 소통할까?
핵심은 인터럽트를 통한 운영체제의 제어이다
CPU는 매우 빠르다 따라서 이 CPU를 기다리게 만드는 건 비효율적이다 그렇기 때문에 계속적으로 일을 주어야 한다 이 일이란 메모리에서 인스트럭션을 하나씩 읽어서 처리히는 것을 의미한다 프로세스와 os는 memory에 올라간다 이걸 읽고 처리하는 것이다 이때 cpu의 레지스터에는 모드 레지스터가 있는데 이 값이 0이면 커널 모드 1이면 사용자 모드이다 커널 모드에서는 모든게 가능하다 os의 코드는 커널 모드에서 돌아간다 즉 메모리 접근부터 입출력 처리까지 모든게 가능하다 하지만 사용자 모드에서는 이게 안된다 이걸 하고 싶으면 시스템콜을 통해서 요청을 해야 한다 시스템콜이 곧 인터럽트이다 다만 소프트웨어적인 인터럽트여서 소프트웨어 인터럽트라고 하고 흔히 트랩이라고 한다 이 트랩이 발동되면 권한이 os의 그 트랩을 처리하는 코드로 넘어가 대신 처리하게 된다 하지만 만약 이런 트랩이 없에 무한루프를 돌게 되면 어떨까? os는 결코 권한을 얻지 못할 것이다 다른 말로 그 프로세스가 cpu를 독점하게 되는 것이다 이를 방지하기 위해 timer라는 것이 존재한다 운영체제는 특정 프로세스에 cpu 권한을 넘겨줄 때 timer를 설정한다 timer는 시간이 되면 인터럽트를 발생하는데 cpu는 인터럽트가 발생했는지를 계속 확인하다가 이를 보면 os에 권한을 넘겨주고 os는 다시 다른 프로세스에 권한을 넘겨준다 이러한 하드웨어적 인터럽트를 보통 인터럽트라고 부르는데 i/o에 의한 인터럽트도 이렇게 발생한다 i/o에는 하드디스크, 키보드, 모니터 등이 있다 그리고 프로세스에서 i/o 요청을 하면 프로세스는 권한을 양보하게 되고 cpu는 제어 레지스터를 통해서 각 입출력 컨트롤러에 명령을 하게 된다 그러면 입출력 컨트롤러에서 버퍼를 통해서 데이터를 관리하고 끝나면 다시 인터럽트를 하게 된다 그런데 cpu에 바로 하게 되면 인터럽트를 계속 받게 될 수 있는 문제가 생기고 성능 저하의 원인이 된다 이를 해결하기 위해 dma(direct memory access)를 두어 여기서 인터럽트를 받으면 메모리에 데이터를 추가하고 인터럽트를 내게 된다

 

CPU의 PC register는 현재 실행하는 인스트럭션의 주소값을 가지고 있다. cpu는 이 주소에 가서 인스트럭션을 실행한다. 커널모드라는 건 모든 인스트럭션을 실행할 수 있다는 것이고 사용자 모드는 입출력이라든지 메모리 관련 인스트럭션을 사용할 수 없다. 

트랩에는 두 종류가 있는데 하나는 exception이고 다른 하나는 system call이다. 시스템 콜은 os에게 원하는 함수 호출을 요청하는 것이고 exception은 cpu에서 오류가 발생하는 예를 들어, 0으로 나눈다든지 사용자 모드에서 다른 프로세스 메모리로 접근한다든지와 같은 상황에서 불리는 것이다. exception이 발생하면 os에게 통제가 넘어가고 그 프로세스는 보통 강제종료를 하게 된다. 

Reference


https://core.ewha.ac.kr/publicview/C0101020140311132925816476?vmode=f

 

반효경 [운영체제] 3. System Structure & Program Execution 1

설명이 없습니다.

core.ewha.ac.kr

https://core.ewha.ac.kr/publicview/C0101020140314151238067290?vmode=f 

 

반효경 [운영체제] 4. System Structure & Program Execution 2

설명이 없습니다.

core.ewha.ac.kr