✨운영체제란?
운영체제는 컴퓨터 사용자와 하드웨어 사이에서 중개자(intermediary) 역할을 한다.
운영체제의 목적은 사용자가 프로그램을 편하고 효율적으로 수행할 수 있는 환경과 컴퓨터 하드웨어를 사용하는 효율적인 방식을 제공하는 것이다.
컴퓨터 시스템은 크게 네 가지로 구분된다.
- 하드웨어
- 운영체제
- 응용 프로그램
- 사용자
하드웨어
CPU(중앙처리장치), 메모리, I/O (입출력 장치)로 구성되어 기본 계산용 자원을 제공
응용 프로그램
워드 프로세서, 스프레드 시트, 컴파일러 등 이들 자원이 어떻게 사용될지 결정
운영체제
운영체제는 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조정할 수 있도록 환경을 제공
운영체제는 컴퓨터 시스템이 동작할 때 이들 자원을 적절하게 사용할 수 있는 방법을 제공한다.
✨컴퓨터 시스템의 구성(Computer System Organization)
위 그림이 컴퓨터를 이루고 있는 기본적인 구조이다.
현대의 범용 컴퓨터 시스템은 하나 이상의 CPU와 여러 구성요소들이 bus라는 데이터 통신 시스템에 의해 연결된 여러 장치 컨트롤러(오디오 장치, 비디오 디스플레이)들로 구성된다.
CPU와 I/O 장치들은 *bus로 연결되어 데이터를 주고받는다.
*bus란?
CPU, I/O 장치, 기억장치들을 연결하여 주소, 데이터 및 제어신호를 전달할 수 있게 하는 통로
저 그림에서의 버스는 System bus이다.
✨컴퓨터 시스템 구조와 실행 (Computer-System Structure & Execution)
CPU
중앙 처리 장치로써 매 클럭마다 메모리에 있는 instruction을 실행한다.
CPU 안에는 register, mode bit, interrupt line이 있다.
register
- 메모리보다 빠른 저장공간
interrupt line
- CPU는 메모리에 있는 것만 실행하는데 다음 실행해야할 것이 명령어가 아닌 것일 때 얘가 CPU에게 알려줌
mode bit
- 지금 CPU에서 실행되고 있는 것이 OS인지 사용자 프로그램인지 알려줌 (0: 운영체제, 1: 사용자 프로그램)
Memory
기억 장치로써 실제 프로그램을 실행하는 영역이다. 운영체제와 실행한 프로그램이 들어있다.
I/O 장치
컴퓨터가 요청한 내용을 입력하거나 보여주는 장치 ex) 마우스, 키보드 디바이스
CPU는 메모리랑만 일할 수 있고 I/O device랑은 직접적으로 일을 하지 않는다.
왜냐하면 I/O 디바이스들은 너무..느림.... CPU는 1초에 16억 ~ 30억정도의 연산을 실행할 수 있는데 사용자가 아무리 빠르게 타자를 쳐도 저걸 따갈 순 없다. 그래서 CPU는 입출력같은 느린 일들을 직접 처리하지 않는다.
그리고 I/O 장치들은 직접 시스템 버스에 접근할 수 없다. 왜냐하면 I/O 장치들마다 속도가 다양하기 때문임
그래서 데이터를 바로 전달하지 않고 device controller를 거쳐서 전달한다.
I/O device에게 입출력을 하라는 명령이 들어오면 데이터들을 자신의 local buffer에 저장한다.
device controller (= I/O controller)
I/O 요청 처리, local buffer에 데이터 저장하고 이 작업이 끝났을 때 interrupt를 거는 역할을 함
즉, 제어하는 주변 장치와 로컬 버퍼 저장소 간 데이터를 이동하는 역할을 한다.
컴퓨터에 USB, 외장하드, 마우스, 키보드.. 등의 device들에는 device controller가 있어서 얘가 버스를 통해 CPU와 직접적으로 통신을 한다.
I/O controller에는 명령을 저장하는 Instruction Register(IR)와 데이터를 저장하는 local buffer(일종의 Data Register)가 있다.
CPU에서 I/O 장치에 명령을 내리면 IR에 명령을 넣어놓는다. 그러면 해당 명령을 꺼내면서 디스크에서 데이터를 읽어가 명령어 순서대로 수행한다.
예를 들어 내가 키보드로 블로그 포스팅을 하면 device controller는 CPU에게 "사용자가 타자를 치고 있으니 처리해" 라는 인터럽트를 한다. 그러면 어떤 키가 눌렸는지 local storage에 있는 값을 읽고 처리한다.
Interrupt
인터럽트는 하드웨어와 OS간의 상호작용 수단이다.
CPU와 memory 사이에 fetch, execute를 하고 있을 때
I/O device들이 CPU에게 "마우스를 눌렀다"고 알려줘야 한다.(event)
이걸 알려주는 방법이 interrupt 이다.
- 하드웨어는 어느 순간에라도 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생(trigger)시킬 수 있다.
- 그러면 system bus를 통해 신호를 전송한다.
얘가 운영체제와 하드웨어의 상호작용 방식 핵심 부분이라고 할 수 있다.
이게 인터럽트 과정에 대한 타임라인이다.
event가 발생하면 CPU에게 interrupt를 보낸다. 그러면 CPU에서 하던 일을 멈추고 하던 일의 주소를 저장한 후 그 interrupt에 관한 서비스 루틴의 주소(fix location)로 가서 execute한다. 그러고 다시 아까 하던 주소로 돌아가 연산을 진행한다.
이 때 interrupt가 굉장히 빠르고 빈번히 진행될 것이다. 그래서 interrupt 주소를 하위 메모리에 저장해놓았다.
이걸 interrupt vector라고 한다.
Timer
time sharing을 구현하기 위해 사용된다.
정해진 시간이 흐른 뒤 interrupt를 발생시켜 운영체제에게 제어권이 넘어가도록 한다.
타이머는 매 클럭 틱마다 1씩 감소하는데 타이머 값이 0이 되면 timer interrupt를 발생시켜 CPU를 특정 프로그램이 독점하는 것으로부터 보호한다.
DMA controller (Direct Memory Access)
직접 메모리에 접근할 수 있는 컨트롤러이다.
수많은 I/O 장치들이 interrupt를 걸게되면 overhead가 발생해 CPU 효율이 줄어들 수 있다.
그래서 DMA controller라는 것을 두어서 I/O 장치에서 local buffer에 입력된 내용을 직접 메모리로 복사해놓고 이 작업이 끝나면 CPU에게 한번만 interrupt를 걸게 한다.
그 외 개념
Bootstrap
컴퓨터가 구동을 시작할 때 수행할 초기 프로그램이다. 메모리에 운영체제를 로딩하는 역할을 한다.
이 프로그램은 컴퓨터 내의 ROM이나 EEPROM에 저장된다.
이 작업을 부팅 혹은 부트스트래핑이라고 한다.
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] 교착상태 (Deadlock, 데드락) (0) | 2023.03.26 |
---|---|
[운영체제] Thread란? (0) | 2023.03.05 |
[운영체제] Process란? (0) | 2023.02.26 |