본문 바로가기
📖 CS/운영체제

🎛️ 운영체제 - 2. System Structure & Program Execution

by 정람지 2024. 4. 10.

출처 : http://www.kocw.net/home/cview.do?lid=af8e05c97c6d60de


🎛️ 컴퓨터 시스템 구조


CPU : 매 클럭 사이클마다 메모리에서 인스트럭션을 읽고 계산을 수행

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

memory : 메모리

register : 레지스터

interrupt line : 디바이스 컨트롤러나 타이머가 여길 통해서 cpu 사용권 가져옴

DMA Controller : 다이렉트 메모리 access / 타이머가 cpu를 너무 자주 방해하지 않도록 교통정리해줌. 

memory controller : 

timer : 특정 프로그램의 cpu 독점 막기 

device controller : 디바이스 내부 통제 ( cpu, io 장치 속도 차이 관리)

local buffer : io 장치의 메모리 같은 작업 공간 

I/O device : 입출력 장치.

키보드, 마우스, 모니터 등등.. cpu보다 속도가 훠어어얼씬 느리다.


🎛️ Mode bit

사용자 프로그램이 다른 사용자 프로그램이나 운영체제에 피해를 끼치지 않도록 권한 설정

🖥️ 모니터 모드 (커널 모드/시스템모드)
mode bit : 0
OS 프로그램 수행 
CPU 제어권 권한 : 운영체제에게 
🖥️ 사용자 모드
mode bit : 1
사용자 프로그램 수행 
CPU 제어권 권한 : 사용자 프로그램에게 

 

모니터 모드 -> 커널 모드 : interrupt 나 Exception 발생시 

모니터 모드 <- 커널 모드 : 운영체제가 cpu 권한 넘기고 modebit 1 세팅

 

특권 명령

- 보안을 해칠 수 있는 중요한 명령어 

- 모니터 모드 (0) 에서만 수행 가능!


🎛️ 타이머 (Timer)

특정 사용자 프로그램의 CPU 사용 독점을 막기 위해서 사용

=> "Time sharing"을 구현하기 위해 이용

 

매 클럭 시마다 1씩 줄어들며,

0이 되었을 시 타이머 인터럽트 발생!

운영체제에게 제어권 넘어감

 

+ 현재 시간 계산을 위해서도 사용


🎛️ 디바이스 컨트롤러 (Device Controller)

I/O 장치에 각각 달려 있으며,  이를 관리하는 일종의 작은 CPU임
control register/status register : 제어 정보를 위한 요소

local buffer : data register 같은 요소 

 

io 입력 일이 완료되면 CPU에 이를 알림 (interupt)


🎛️ 입출력 (I/O)의 수행

입출력 => 특권명령! (운영체제가 모니터 모드에서 수행해야 함)

 

사용자 프로그램이 입출력 명령을 수행해야 할 때

"시스템 콜 (System call)" 사용 

 

- 사용자 프로그램은 운영체제에게 i/o 요청

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

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

- 올바른 io 요청인지 확인하고 수행

- io 작업 완료 시 제어권을 사용자 시스템 코드의 시스템콜 다음 명령으로 옮김


🎛️ 인터럽트 (Interrupt)

인터럽트가 들어오면 

그 시점의 "레지스터, program counter"를 인터럽트 처리 루틴에 넘김

 

< Interrupt 분류 >

interrupt (하드웨어 인터럽트) -  하드웨어가 발생시킨 인터럽트
Trap(소프트웨어 인터럽트) Exception 프로그램이 오류를 발생시킨 경우 
  System call 프로그램이 커널 함수를 호출한 경우 

 

< Interrupt 관련 용어 >

인터럽트 벡터 : 해당 인터럽트의 처리 루틴(어떻게 처리해야 하는지) 주소를 가지고 있음

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

timer, device controller 가 cpu의 interrupt line을 통해 interrupt 발생시킴

 

현대 운영체제 : 인터럽트를 통해 구동 

 


🎛️ 시스템 콜 (System call)

사용자 시스템이 커널 함수를 실행하고 싶을 때,

운영체제가 실행해야 하므로(특권명령이라 모니터 모드에서 수행해야 함)

시스템 콜을 함

 

디바이스 컨트롤러나 타이머가 인터럽트 라인으로 인터럽트를 걸고,

CPU는 다음 메모리 인스트럭션을 실행하기 전에 인터럽트 라인을 체크하고,

있다면 이를 실행함(제어 권한을 os에게)


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

동기식 입출력 (Synchronous I/O)

동기식 입출력은 한 작업이 완료될 때까지 기다렸다가 다음 작업을 실행하는 방식

어떤 I/O 작업을 요청하면 그 작업이 완료될 때까지 프로그램이 멈춰 있게 되고, 결과가 돌아온 후에야 다음 코드 라인으로 넘어감

(= 입출력 작업 완료 후에 제어가 사용자 프로그램에게 돌아감)

 

1. io 작업 완료 전까지 CPU 제어권을 유지

2. io 작업 완료 전까지 CPU 제어권을 다른 프로그램에게 넘김 

 

비동기식 입출력 (Asynchronous I/O)

비동기식 입출력은 I/O 작업을 요청한 후, 그 작업이 완료되기를 기다리지 않고 바로 다음 코드 라인으로 넘어감

(= 입출력 작업 완료 전에 제어가 사용자 프로그램에게 즉시 돌아감)

 

 

- 두 방법 모두 I.O 의 완료는 인터럽트로 알림 


🎛️ DMA (Direct Memory Access)

CPU의 중재 없이 메모리에 직접 접근할 수 있게 해주는 기술

=> 데이터 전송 시 CPU가 아닌 디바이스 컨트롤러가 데이터를 메모리의 버퍼 스토리지에 직접 전송

 

이를 통해 데이터 블록을 메모리로 직접 전송할 수 있어, CPU의 부하를 줄이고 시스템의 전반적인 효율성을 높일 수 있음

 

  1. CPU가 관여하는 방식: CPU가 데이터 전송을 시작하고, 디바이스 컨트롤러가 전송을 담당. 이 경우 CPU는 전송 시작에만 관여하며, 나머지 전송 과정은 컨트롤러가 처리
  2. CPU가 관여하지 않는 방식: CPU 없이 컨트롤러가 전체 데이터 전송 과정을 직접 담당

"바이트 단위"가 아니라 "블럭 단위로" 로 인터럽트 발생시킴

n번째 구간 끝났어요~


🎛️ 서로 다른 입출력 명령어 

모리 맵드 I/O는 디바이스와 메모리 간의 데이터 전송을 위해 특별한 지시어(special instruction)에 의해 실행

이 방식에서는 각 디바이스에 메모리 주소가 할당되어, 마치 메모리의 일부인 것처럼 데이터를 주고받을 수 있음

이를 통해 CPU는 메모리 주소를 통해 디바이스에 접근할 수 있으며, 프로그래밍이 훨씬 단순화됨


🎛️ 저장 장치 계층 구조


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


🎛️ 커널 주소 공간의 내용


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

- 사용자 정의 함수

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

- 라이브러리 함수

 갖다 쓴 함수

자신의 프로그램의 실행 파일애 포함되어 있음

- 커널 함수

운영체제 프로그램의 함수

커널함수의 호출 = 시스템 콜


🎛️ 프로그램의 실행


휴!

이건 마우스다