본문 바로가기

cs/운영체제

운영체제 3강 System Structure &Program Execution 1

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

 

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

설명이 없습니다.

core.ewha.ac.kr

 

이번강의는 컴퓨터 시스템에서 하드웨어가 어떻게 동작하는지 프로그램들이 하드웨어 위에서 어떻게 돌아가는지에 대해서 다룬다.

 

컴퓨터 시스템의 구조

컴퓨터 시스템의 하드웨어 구조를 간단히 표현한 도식

이론적으로 보자면 메모리와 cpu 까지가 컴퓨터라고 볼수 있고

 

나머지 I/O 디바이스 들은 컴퓨터라고 보지않는다.

 

좀더 자세히 표현한 도식

이제 각각을 살펴보자

 

메모리:

cpu의 작업공간이다 -> cpu는 매 사이클마다 메모리에서 기계어를 한줄씩 읽어와서 실행한다.

 

I/O device:

I/O device 들은 애초에 다른 기기들이다.(하드디스크 또한 I/O device다)

I/O device 들은 각각의 디바이스들을 전담하는 작은 cpu 같은 device controller 들을 가지고있다.

-> 디스크에서 헤드가 어떻게 움직일지등 내부를 통제하는것은 cpu가 아닌 device controller이다.

cpu에 작업공간인 메인메모리가 있듯 divice controller의 작업공간인 local buffer가 있다.

 

I/O디바이스를 직접 cpu가 통제하지않는데 이는 너무 큰 속도차이가 있어서이다

cpu와 하드디스크의 속도차이는 100만배 정도라고 한다.

 

메모리도 다른 I/O 디바이스처럼 전용컨트롤러인 memory controller 가 붙어있다.

원칙적으로는 메모리는 cpu만 접근할수있도록 만들어놓았다.

 

CPU:

cpu 의 업무는 단하나이다 사이클별로 메모리에서 기계어를 읽어와서 한줄씩 실행시키는것이다.

cpu에는 메모리보다 더 빠르면서 정보를 저장할수있는 공간인 register 라는것이있다.

mode bit 라는것이 cpu 내부에 존재하는데 현재 실행되고 있는것이 운영체제인지 사용자프로그램인지를 구분해주는 역할이다.

 

mode bit

0 일떄는 os 가 점유권을 갖고있을때 (커널모드,모니터 모드)

1 일때는 사용자 프로그램이 점유권을 갖고있을때 (사용자 모드)

 

mode bit 의 역할은 메모리,I/O 디바이스 접근의 권한을 관리

mode bit 가 0일 떄는 메모리 및 I/O 디바이스 등 다 접근가능

하지만 1일때는 제한된 instruction 만 접근가능하다 -> 보안 관련 기능임

프로그램을 다른 프로그램 혹은 직접 I/O 디바이스를 접근하려해도 mode bit 이 1 이면 막아버리도록 프로그래머가 이상한짓 못하게 막음

사용자 프로그램으로 cpu 제어권을 넘길때 mode bit을 1로 바꿔서 넘김

 

 

cpu에는 Interrupt line 들이 붙어있는데 cpu는 항상 메모리의 instruction을 계속 실행한다 -> 주기를 돌면서 계속 instruction 만 처리하는것이다. -> I/O divice에서 처리해야하는 일들 혹은 들어온 입력내용들 ex) 키보드에서 입력이 들어온다던지, 디스크에서 뭘 읽어오라 시켰는데 다 읽어왔다던지 이런것들을 cpu가 인식하도록 전달하는 방법이 interrupt line 이다.

결국 cpu는 메모리랑만 일한다. 디스크에서 읽어오라는 instruction 이있는 경우 직접 디스크에 접근하는것이 아닌 divice controller에게 읽어오라고 일을 시킨다. -> 일을 시키는 instruction 이있다. -> 읽어오는 작업 오래걸린다  ->  읽어오라고 일만시키고 다른일 그대로 한다.(만약 결과값을 받아서 처리해야하는 경우 cpu점유권이 다른 프로그램으로 넘어간다)-> 읽어온 내용들 일단 local buffer 에 쌓인다. -> interrupt line 으로 I/O의 일이 다끝났음을 알린다.

매번 cpu는 instruction이 끝날때마다 interrupt line을 한번씩체크한다. -> 타이머 interrupt 가 와있으면 다음 cpu 점유는 운영체제로 넘어간다.

사용자 프로그램이 구동하다 I/O를 해야하는 instruction 을 만나면 I/O를 해달라고 운영체제로 cpu 점유를 넘긴다.

-> I/O장치는 운영체제에서만 접근할수있다.

interrupt가 걸리면 일단 cpu제어권이 운영체제한테 넘어간다 -> 키보드입력이 끝나고 키보드 컨트롤러가 interrupt를 걸면 -> cpu 점유권이 운영체제로 넘어가고 운영체제가 interrupt가 왜 들어왔나 보고 키보드 입력을 요청한 프로그램의 메모리공간에 넣어주고 다시 적절한 프로그램으로 제어권을 넘긴다.

 

timer:

cpu 에 I/O같은것도 안하고 그냥 무한루프도는 프로그램을 물리면 cpu를 계속 점유하고 놓지않으니 특정프로그램이 cpu를 독점하는것을 막기위해 최초 운영체제가 cpu를 가지고있다가 사용자 프로그램에게 cpu 점유를 넘겨줄때 timer 를 세팅하며

 할당된 시간내로 cpu를 이용할수있다. -> 시간이 초과하면 타이머가 interrupt를 cpu에 걸어준다. cpu 를 시분할로 사용하기위한 하드웨어

divice controller

 I/O 장치를 제어하는 미니 cpu 

각각의 메모리인 local buffer 을 지님

화면을 출력할때 출력할 내용을 local buffer 에 담고 control register 를 통해서 출력하라고 cpu에서 명령이 내려옴

device controller 은 하드웨어이고

그위에 올라가는 운영체제의 코드를 divice driver 라고 한다.-> cpu가 I/O 장치에 내리는 명령 

실제로 하드디스크 헤드가 움직이고 이런거를 divice driver 라고 하지는 않음 -> 이러한것은 펌웨어라고 함 

 

DMA controller(Direct Memory Access controller)

원래 메모리에는 cpu 만 접근할수있는게 원칙이고 I/O장치가 읽어오거나 어쩌구 저쩌구 일을 마치고 작업내용을 메모리에 적재해야할때도 cpu에 interrupt를 걸고 cpu가 메모리에 내용들을 옮기는게 맞지만 

이러면 I/O 장치와 경우의수가 한두개가 아니라 intrrupt가 너무많이 자주 걸려서 cpu의 성능을 낼수가 없다(엄청 빠른 장치인데 계속 방해하는 꼴이니)

그래서 cpu 성능을 제대로 내기위해서 I/O 장치에서 온 정보라던지 이런것들을 DMA 컨트롤러를 통해 직접 메모리에 접근하여 정보들을 적재하고 완료되었다는 한번의 intruppt 만 걸어서 성능을 끌어올린다.

->cpu 와 DMA 컨트롤러와 동시에 같은 메모리에 접근할수 있으므로 그것은 문제가 되니 이것을 같은곳에 접근 못하게 조율하는것이 메모리 controller 이다.

 

 

I/O 장치의 접근은 특권명령이다 운영체제만 접근가능

사용자 프로그램은 I/O 해야할경우 운영체제에게 부탁하는데 그것을 시스템 콜(커널함수 호출)이라고 한다.

 

시스템 콜이 어떤 방식으로 이루어 지는가하면

만약 내가 c언어로 프로그램을 짠다면 main 함수가 돌아가고 그에대한 서브루틴들을 돌것이다.

근데 그 서브루틴 혹은 제어문 if문 이런것들을 만나면 메모리 주소 공간을 점프하고 계속 돌고 할텐데 결국 사용자 프로그램이 점프할수있는 메모리범위는 그 사용자프로그램 범위내이다 mode bit 이 1이기 때문에 운영체제의 메모리로 직접 접근하거나 하는건 다 막혀있다. 그래서 사용자 프로그램이 시스템을 콜해야하는 상황이 온다면 interrupt line을 세팅하는 instruction을 생성한다. 사용자 프로그램이  I/O를 위하여 interrupt를 걸수있다.-> cpu 제어권이 운영체제로 넘어간다.

 

그리고 시스템 콜이있다고 무조건 실행하는것이 아닌 그 프로그램이 접근할수있는 부분인지 운영체제에서 판단후 실행한다.

 

interrupt 를 두개로 나누는데

하드웨어(I/O,timer이런것들에의한 interrupt)인터럽트라한다

소프트웨어 인터럽트 -> Trap 라고도 부름 Trap 이라고 대부분 부름.

 

인터럽트 벡터: 각각의 인터럽트들이 있을텐데 각 인터럽트당 해야할 일들이 정리되어있는 코드가 있는 주소 즉 해당함수의 주소 

 

시스템 콜:

I/O 뿐만 아니라 사용자 프로그램이 운영체제에게 무언가를 요청해야하는경우 운영체제의 코드를 수행해야하는경우 시스템 콜을 통해서 수행함