CS 지식/운영체제

하드웨어 구조와 프로그램 실행 방식

claire 2022. 1. 22. 15:54

컴퓨터 시스템에서 하드웨어가 어떻게 동작하는지, 프로그램이 이 위에서 어떻게 돌아가는지 운영체제를 본격적으로 배우기 전에 알아보는 시간이다. 

 

하드웨어는 cpu와 메모리로 구성된 컴퓨터와 I/O 디바이스로 구성이 되어있다.

메모리는 cpu의 작업공간이다. cpu는 매 순간 메모리에서 기계어를 읽어서 실행을 하게 된다.

하드디스크는 보조 기억 장치이지만 io device로 볼 수도 있다.

device controller가 각 io device에 붙어있어서 이 장치들을 전담하는 cpu역할을 한다.

cpu안에 레지스터가 있다.

mode bit은 cpu에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분해준다. interrupt line은 cpu는 항상 메모리에 있는 instruction만 실행한다. 

 

cpu는 항상 메모리하고만 일한다. cpu는 io device에 직접 접근하지 않는다. 

컴퓨터 안에는 timer가 있다. timer는 특정 프로그램이 cpu를 독점하는 것을 막기 위한 것이다. 

timer에 값을 세팅하고 cpu에 프로그램을 넘겨준다. 세팅된 시간이 다 되면 cpu에 interrupt를 건다.

cpu는 instruction을 수행하다가 interrupt line을 체크하며 interrupt가 들어온게 있는지 확인한다. 

사용자 프로그램은 직접 io장치에 접근이 불가능하다. 운영체제를 통해서 하도록 막아뒀다.

운영체제에 cpu를 넘겨주고 원하는 작업을 io controller에 요청하고 cpu를 이 프로그램 말고 그 다음 프로그램에 넘겨준다. 

io 요청을 한 프로그램은 io controller가 작업을 완료할 때까지 기다린다.

완료되면 이 controller가 cpu에 interrupt를 걸고 운영체제에 cpu가 넘어간다. 

 

mode bit이 0이면 모니터 모드이다. 운영체제가 cpu에서 수행 중인 것을 말한다. 커널 모드. 

1이면 cpu가 사용자 프로그램을 실행 중일 때이다. 

mode bit이 0일때는 무슨 일이든지 다 할 수 있다. io 디바이스에도 접근 가능

1일때는 제한된 instruction만 cpu에서 실행이 가능하다. 보안상의 목적. 

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

보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 특권명령으로 규정. 

interrupt나 exception 발생시 하드웨어가 mode bit을 0으로 바꿈. 

사용자 프로그램에게 cpu를 넘기기 전에 mode bit을 1로 세팅. 

 

timer. 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴, cpu를 특정 프로그램이 독점하는 것으로부터 보호. 

 

io decive controller

- 해당 io 장치 유형을 관리하는 일종의 작은 cpu

- 제어 정보를 위해 control register, status register를 가짐. - cpu가 일을 시킬때 이 register를 통해 일을 시킨다.  

- local buffer를 가짐(일종의 data register) 

io는 실제 device와 local buffer사이에서 일어남

device controller는 io가 끝났을 경우 interrupt로 cpu에 그 사실을 알림. 

 

cpu는 메모리랑 로컬 버퍼 모두 접근가능.

interrupt가 너무 많이 걸리게 되어 중간에 DMA controller를 둔다. 이것은 직접 메모리를 접근할 수 있는 컨트롤러이다.

memory에는 cpu와 dma가 접근할 수 있는데 이들의 접근을 조절하는 것을 memory controller라고 한다. dma controller의 역할은 중간중간 들어오는 local buffer의 내용의 작업이 끝났으면 이것을 메모리로 복사해주는 것까지 해주는 것이다. 이 복사가 모두 끝나면 메모리에 올라왔다고 cpu에 interrupt를 한번만 걸어준다. 따라서 cpu에 걸리는 intterupt가 줄어들어 효율적이다. 

 

device driver : os 코드 중 각 장치별로 처리 루틴을 말한다.(software)

device controller : 각 장치를 통제하는 일종의 작은 cpu(hardware)

 

사용자 프로그램이 운영체제의 함수를 호출하는 것을 시스템 콜이라고 한다.  내 프로그램을 실행하다가 io요청을 수행하기 위해 운영체제의 함수를 호출하는 것이다. 

 

인터럽트는 소프트웨어 인터럽트(trap)과 하드웨어 인터럽트(interrupt)가 있다.

하드웨어가 발생시킨 인터럽트가 우리가 보통 말하는 인터럽트이다. 

trap의 종류에는 프로그램이 커널 함수를 호출하는 system call과 프로그램이 오류를 범한 경우인 exception이 있다. 

trap을 사용하여 interrupt를 건다. 

 

사용자 프로그램이 io요청을 하기 위해서 cpu에 시스템콜을 해준다. (소프트웨어 인터럽트)

시킨 일이 다 끝나면 하드웨어 인터럽트로 cpu에 알려준다. io를 위해서는 소프트웨어 인터럽트와 하드웨어 인터럽트 모두 필요하다. 

 

현대의 운영체제는 인터럽트에 의해 구동된다. 운영체제는 cpu를 잡을 일이 없다. 인터럽트가 들어올때만 cpu가 운영체제로 넘어간다. 그렇지 않은 경우에는 cpu를 사용자 프로그램이 사용하고 있다. 

 

시스템콜은 사용자 프로그램이 운영체제에 부탁할때의 방법이다. 

사용자 프로그램이 운영체제 코드를 직접 수행하는 것이 불가능 하기 때문에 interrupt line을 세팅해서 cpu제어권을 운영체제로 넘겨서 부탁한 일을 운영체제가 할 수 있도록 하는 것이다. 

 

인터럽트 관련 용어

 

인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음. 각각의 인터럽트마다 운영체제가 해야할 일이 다르다. 각각의 인터럽트 종류마다 무슨 일을 해야하는지 운영체제의 코드에 정의가 되어있다. 각 인터럽트마다 처리해야할 코드를 인터럽트 처리 루틴이라고 부른다. 

 

각 인터럽트 종류마다 어디있는 함수를 처리해야하는지 함수의 주소들을 정의해놓은 테이블을 인터럽트 벡터라고 부른다.