티스토리 뷰

code/OS

시스템 구조 & 프로그램 실행

golee922 2020. 8. 9. 17:03

컴퓨터 시스템 구조

 

DMA

Contoller timer

l l

cpu -------------------------------- disk (인풋, 아웃풋 동시에)

l l

memory l----- 키보드, 마우스 ( 인풋 디바이스)

프로그램A l----- 프린터 (아웃풋 디바이스)

프로그램B l----- 모니터 (아웃풋 디바이스)

...

OS

 

 

computer I/O device

 

 

I/O device : 모두 각각 device controller, local buffer를 가지고 있는데

해당 디바이스 내의 cpu, memory 역할을 한다.

 

 

cpu : memoryinstruction을 하나씩 꺼내서 수행한다.

registers : memory보다 빠르면서 정보를 저장할 수 있는 작은 공간

mode bit : cpu에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분

interrupt line : 일을 수행중에 I/O device와 소통을 수행해줌 (,출력, 완료알림)

 

 

timermemory 안의 특정 프로그램이 너무 오래 잡고있으면

timer에 할당된 시간을 보고 cpuinterrupt를 건다.

cpu는 다른 프로그램을 실행한다.

 

 

memory : memorymemory controller를 가지고있음

 

 

Mode bit

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

- Mode bit을 통해 하드웨어적으로 두가지 모드의 operation 지원

1 사용자 모드 : 사용자 프로그램 수행

0 모니터 모드(커널모드, 시스템모드) : OS 코드 수행

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

- interruptException 발생시 하드웨어가 mode bit0으로 바꿈 (=모니터모드로 변경)

- 사용자 프로그램에게 cpu를 넘기기 전에 osmode bit1로 셋팅(=사용자모드로 변경)

 

 

Timer

- 정해진 시간이 흐른뒤 운영체제에게 제어권이 넘어가도록 interrupt (인터럽트)를 발생시킴

- 타이머는 매 클럭 틱때마다 1씩 감소

- 타이머값이 0이 되면 타이머 인터럽트 발생

- cpu를 특정 프로그램이 독점하는 것으로부터 보호

- time sharing을 구현하기 위해 널리 이용됨

- 현재 시간을 계산하기 위해서도 사용됨

 

 

Device Controller

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

- 제어 정보를 위해 control register, status register를 가짐

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

- I/o는 실제 devicelocal buffer 사이에서 일어남

- I/o가 끝났을 경우 interruptcpu에 그 사실을 알림.

 

device driver(장치구동기)

- os 코드 중 각 장치별 처리 루틴 -> 소프트웨어

device controller(장치제어기)

- 각 장치를 통제하는 일종의 작은 cpu -> 하드웨어

 

 

DMA controller (Direct Memory Access) : 직접 memory에 접근할수 있는 장치

(제대로 와닿지는 않지만...) I/o devicecpuinterrup를 많이 거니까 (키보드 하나하나 칠때마다 인터럽트 걸수 없음)

명령 주고받는일을 대신 해주고 cpumemory에 있는 작업에 집중할 수 있게끔 한다.

- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용

- cpu의 중재 없이 device controllerdevicebuffer storage의 내용을 메모리에 block 단위로 직접 전송

- 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킨다.

 

 

입출력 I/o의 수행

- 모든 입출력 명령은 특권 명령

- 사용자 프로그램은 어떻게 I/o를 하는가?

  - 시스템콜(system call) : 사용자 프로그램이 운영체제에게 I/o 요청

- trap을 사용하여 인터럽트 벡터의 특정 위치로 이동

=> 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동

=> 올바른 I/o 요청인지 확인 후 I/o 수행

=> I/o 완료 시 제어권을 시스템콜 다음 명령으로 옮김

 

 

인터럽트 (Interrupt)

- 인터럽트 당한 시점의 레지스터와 program countersave 한 후,

cpu의 제어를 인터럽트 처리 루틴에 넘긴다

- 하드웨어 인터럽트 (interrupt) : 하드웨어가 발생시킨 인터럽트

- 소프트웨어 인터럽트 (trap) :

- exception : 프로그램이 오류를 범한경우

- system call : 프로그램이 커널 함수를 호출하는 경우

 

- 관련 용어

인터럽트 백터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음

인터럽트 처리 루틴 (=interrupt Service Routine, 인터럽트 핸들러)

  : 해당 인터럽트를 처리하는 커널 함수

- 현대의 운영체제는 인터럽트에 의해 구동됨

 

 

 

시스템콜

- 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것

 

 

 

동기식 입출력과 비동기식 입출력

동기식 입출력 (synchronous I/o)

- I/o 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감

- 구현 방법 1 : I/o가 끝날때까지 cpu를 낭비시킴, 매시점 하나의 I/o만 일어날 수 있음

- 구현 방법 2 : I/o가 완료될 때ᄁᆞ지 해당 프로그램에서 cpu를 빼앗음

I/o 처리를 기다리는 줄에 그 프로그램을 줄 세움

다른 프로그램에게 cpu를 줌

 

비동기식 입출력 (asynchronous I/o)

- i/o가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

 

두 경우 모두 I/o의 완료는 인터럽트로 알려줌

 

서로 다른 입출력 명령어 (i/o를 할 수 있는 두가지 방법)

 

- 일반적 i/o 방식

memory addresses - primary memory

device addresses l device 0

device addresses l device 1

device addresses - device 2

l

I/o를 수행하는 special instruction

 

memory mapped I/o

memory addresses - primary memory

memory addresses l device 0

memory addresses l device 1

memory addresses - device 2

 

 

 

저장장치 계층 구조

 

registers

ㅣ ㅣ

cache memory

l l

main memory ---> 여기까지 primary (executable), 휘발성 매체

l l

magnetic disk

l l

optical disk

l l

magnetic tape ---> 여기까지 secondary, 비휘발성 매체

 

speed

cost

volatility

위에 있는것일수록 빠르고, 가격이 비싸다

 

caching : copying information into faster storage system

 

 

프로그램의 실행 (메모리 load)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

사용자 프로그램이 사용하는 함수

 

사용자 정의 함수 : 자신의 프로그램에서 정의한 함수

라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수, 자신의 프로그램의 실행파일에 포함되어 있다.

=> 위 두가지는 사용자 프로그램 내 Address space(stack, data, code) 바로 code 안에 있다.

 

커널 함수 : 운영체제 프로그램의 함수, 커널 함수의 호출? = 시스템 콜

=> 커널 address space code 안에 들어있다.

 

 

프로그램의 실행

 

a의 주소공간에서 프로그램 시작 사용자 정의 함수 사용 -> 시스템 콜 -> 커널 모드 -> 일을 수행하고 유저모드로 리턴 -> 라이브러리 함수도 사용하다가 -> 시스템 콜 -> 커널 모드 -> 계속 진행하다가 반복반복 -> 프로그램 종료

 

 

'code > OS' 카테고리의 다른 글

프로세스 동기화(Process Synchronization)  (0) 2020.08.09
CPU 스케줄링  (0) 2020.08.09
프로세스 운영  (0) 2020.08.09
프로세스  (0) 2020.08.09
운영체제 소개  (0) 2020.08.09