본문 바로가기

프로그래밍/운영체제

[운영체제] System Structure & Program Execution

컴퓨터 시스템에서 하드웨어가 어떻게 동작하는지,

프로그램들이 하드웨어 위에서 어떻게 돌아가는지 알아보자

 

컴퓨터는 베이스로 CPU 와 메모리로 구성되어있다.!

Input 컴퓨터로 들어가는 데이터!

Output 다시 컴퓨터에서 장치로 돌아가는 데이터

 

메모리라는건 CPU 의 작업공간이다.

CPU 에서 매 클럭 사이클마다 메모리에서 Instruction 기계어를 하나씩 읽어서 실행하게 된다.

 

IO 디바이스는 별개의 장치들

DISK 는 I/O 두 기능을 다한다.

이 I/O 디바이스들은 이 디바이스들을 전담하는 작은 CPU 들이 붙어있다.

그걸 디바이스 컨트롤러라 한다.

 

디스크 의 내부를 통제하는건 디스크 컨트롤러가 한다.

헤더를 어떻게 움직일지.. 

 

CPU 안에는 메모리 보다 빠른 레지스터가 있다.

modebit - CPU 에서 실행되는게 운영체제인지 사용자 프로그램인지 구분해준다.

 

(CPU 는 하나의 인터럭션을 수행하고나면 인터룹트에 들어온게 있는지 확인한다 )

 

TIMER - 처음에는 운영체제가 CPU 를 가지고 있다가 사용자 프로그램이 실행되면 

CPU 를 넘겨주는데 넘겨주기 전에 TIMER 에 값을 세팅 하고 넘겨준다.

 

 

사용자 프로그램의 인터럭션이 이 timer 에 할당된 시간(1초도 안되는 ms)을 넘으면 CPU 에 인터룹트를 건다.

인터룹트를 걸면 인터룹트 라인에 들어가고 , 

CPU 는 사용자 프로그램에서 다시 운영체제로 넘어가게 된다.

 

 

- 한 프로그램이 CPU 를 사용하다가 I/O 작업을 해야되면 , CPU 를 운영체제에 넘겨준다.(시스템 콜)

사용자 프로그램은 I/O 작업을 직접할 수 없고 , 운영체제를 통해서만 하게 되어있다.(보안적 문제로)

운영체제가 해당하는 작업을 I/O 컨트롤러에게 시킨다.

근데 이 작업은 오래 걸리니까, 요청한 프로그램 말고 다른 프로그램에게 CPU 를 넘겨준다.

I/O 요청했던 프로그램은 언제 다시 CPU 를 받냐? 하면

I/O 컨트롤러가 요청한 작업이 끝나서 ,

자신의 로컬 버퍼에 들어오게 되면 컨트롤러가 CPU 에게 인터룹트를 건다.

 

인터룹트가 들어오면 CPU 제어권이 실행중인 프로그램에서 운영체제에 돌아오게된다.

그럼 CPU 가 들어온 값을 보고 , 운영체제는 Input 으로 들어온 값을 요청했던 프로그램 메모리에 넣어주고 

방금전에 인터룹트 된 프로그램에 다시 제어권을 주고 그 친구의 시간이 끝나면

라운드 로빈으로 돌리면서 Input 요청을 받아 준비가 완료된 프로그램에 다시 제어권을 주게 된다.

 

0 일때? 운영체제가 CPU 에서 쓰일때 , 커널모드라고 한다.

1 일때 , 사용자 모드 일때

Modebit 의 역할은? 0일때는 메모리 접근 뿐만 아니라 I/O 디바이스 접근 인스트럭션도 

0일때는 사용 가능하다.

1일때는 제한된 인스트럭션만 사용할 수 있게 된다.

 

보호와 보안의 목적으로 나눠져있다.

 

특정 프로그램이 독점하는것을 방지하기 위해 있다.

타이머 값이 0 이되면 프로그램의 권한을 뺏을수있다.

 

I/O 디바이스를 접근하는 작은 CPU 라고 보면된다.

실제 데이터를 저장하는 로컬 버퍼가 있다.

 

 

DMA Controller?

 

직접 메모리를 접근할 수 있는 컨트롤러다.

원래는 메모리에 접근할 수 있는 장치는 CPU 뿐이었는데,

DMA 도 접근할 수 있게 되어있다.

 

I/O 장치가 너무 자주 인터룹트를 거니까 CPU 가 너무 멈추게 된다.

DMA 역할은 I/O 작업들의 요청이 들어왔을때, 

I/O 의 있는 로컬 버퍼 데이터를 메모리에 옮기는일을 CPU 가 하기엔 너무 손해가 크다.

DMA 가 이 데이터를 메모리에 복사하는 역할을 한다.

 

 

사용자 프로그램이 직접 I/O 를 못하고 운영체제를 통해서만 할 수 있다.

파일을 읽어와야 할때 어떻게 하느냐 

운영체제의 부탁을 해야하는데 

이 부탁하는걸 시스템 콜 이라고 한다.  사용자 프로그램이 운영체제에 I/O 요청을 하는 것

소프트웨어적으로 인터룹트 라인을 건다.

 

하드웨어  - 타이머나 I/O 가 거는 인터럽트

넓게는 소프트웨어의 인터럽트도 포함한다.