반효경 [운영체제] 3. System Structure & Program Execution 1
https://core.ewha.ac.kr/publicview/C0101020140311132925816476?vmode=f
컴퓨터 시스템 구조
cpu와 memory로 구성된 것을 보통 컴퓨터라고 한다. Memory는 CPU의 작업 공간이다.
I/O device(input/output) - input(키보드, 마우스)는 i/o device의 데이터가 컴퓨터로 들어가는 것을 말하고 데이터를 받아서 처리를 한 결과를 다시 device로 내보내는 것을 output(프린터, 모니터)이라고 한다.
하드디스크는 보조기억장치로 이야기 하지만 i/o device라고 보기도 한다. 메모리로 읽어들이기도 하고(input) 처리 결과를 디스크에 파일 시스템에 저장하기도 한다.(output)
CPU 는 굉장히 빠르면서 쉬지않는 일꾼
- cpu는 매 클럭마다 메모리에서 instruction을 읽어서 실행하고, 실행 완료 시 프로그램 카운터 레지스터의 주소 값을 증가시킨 후 다음 instruction을 찾아 실행한다.
- register → cpu에서 임시 정보들을 저장하는 공간
- mode bit. → cpu 안에서 현재 실행되는 instruction이 운영체제 or 사용자 프로그램 중 어디로부터 왔는지 구별해준다.
- interrupt line → cpu가 현재 instruction을 실행 완료하고 kernel mode로 전환하게 끔 만들어 device들의 io 작업을 수행하도록 한다.만약, 중간에 io작업도 없이 무한 루프를 도는 프로그램이 있다면? 계속해서 cpu를 독점하여 사용하게 된다. 이는 cpu의 time sharing을 구현하지 못하도록 만든다. 이처럼 특정 프로그램이 cpu를 독점하는 것을 막기 위해, timer가 사용된다.
1. Timer
→특정 프로그램이 CPU를 독점하는 것을 막기위해, Timer에 정해진 시간만큼 할당!
- 타이머
- 정해진 시간이 흐른 뒤 운영체제엑 제어권이 넘어가도록 인터럽트를 발생시킴
- 타이머는 매 클릭 틱 대마다 1씩 감소
- 타이머 값이 0이 되면 타이머 인터럽트 발생
- CPU를 특정 프로그램이 독점하는 것으로부터 보호
- 타이머는 time sharing을 구현하기 위해 널리 이용됨
- 타이머는 현재 시간을 계산하기 위해서도 사용
- 처음 cpu가 켜졌을 때는 운영체제가 cpu를 가지고 있다가, 사용자 프로그램이 시작되면 cpu를 넘겨주게 된다. 이때, timer에 해당 프로그램에 대한 세팅을 하고 넘겨준다. 그러면 사용자 프로그램이 cpu를 통해 instruction을 실행되다가도, 맞추어둔 timer 세팅 시간이 완료되면 timer가 interrupt를 걸어오고, cpu의 제어권이 사용자 프로그램에서 운영체제로 넘어간다.
- (timer 없이 interrupt를 발생시키는 경우) 사용자 프로그램이 io가 필요하면, 스스로 운영체제에 cpu를 넘겨준다. 그러면 운영체제가 io작업을 device controller에 맡기고, 그동안 cpu는 다른 instruction을 실행하게 된다.
- ex) 만약 사용자 프로그램이 키보드에서 io를 받으려고 한다면 다음 순서로 입력을 받게 된다. 1. 사용자가 키보드 입력을 완료하고, 2. 키보드 컨트롤러가 input을 완료하고, 3.cpu에 interrupt를 건다. 4. cpu는 아까의 작업을 기억하고(pcb를 통함), input 내용을 copy하고, 해당하는 프로그램의 할당된 시간이 남았으면 제어권을 주거나, 시간이 다 되었으면 언젠가 해당 프로그램의 차례가 되었을 때 제어권을 준다.
2. Mode bit
→사용자 프로그램에 대한 프로그램 및 운영 체제의 보호를 위함.
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보조 장치 필요
- Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation
- 지원1 사용자 모드 : 사용자 프로그램 수행
- 0 모니터 모드 : OS 코드 수행
- 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 '특권명령'으로 규정
- Interrupt나 Exception 발생 시 하드웨어가 mode bit을 0으로 바꿈
- 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅
모니터 모드(= 커널 모드, 시스템 모드)
→즉 보안상 목적이 크다
3. Device Controller
- I/O device controller
- 해당 I/O 장치유형을 관리하는 일종의 작은 CPU
- 제어 정보를 위해 control register, status register를 가짐
- local buffer를 가짐 (일종의 data register
- I/O는 실제 device와 local buffer 사이에서 일어남
- Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림
Device Controller 관련 용어
⭐ device driver(장치구동기) : OS 코드 중 각 장치별 처리루틴 -> software
- 운영체제의 코드에서 device에 대한 코드가 있는데, 이에 맞게 코드를 제공. device를 붙이면, 운영체제에서 접근할 수 있도록 하는 소프트웨어. os에 설치.
⭐ device controller(장치제어기) : 각 장치를 통제하는 일종의 작은 CPU -> hardware
Cpu의 instruction 실행 과정
- cpu는 실행해야 할 instruction의 메모리 주소를 register 중에서 프로그램 카운터라는 레지스터로부터 가져와 instruction를 실행한다.
- 그리고 그 instruction중에서 io 장비에 접근해야 하는 것이 있으면 디바이스 드라이버를 통해서 읽도록 하는 명령을 내린다. 드라이버가 직접 디바이스를 읽게 하는 코드는 아니다. 디바이스가 동작하도록 하는 코드는 펌웨어다.
- 디바이스 드라이버는 cpu가 실행하는데 필요한 코드를 갖고 있는 것이다.
- cpu는 직접 일을 할 수 없고, 메뉴얼 대로 일을 한다. 메모리 몇 번지에 일을 하라고 하면 하고, 그 다음 메뉴얼에 있는 일을 한다. 스스로 x.
- 그리고 이에 대한 전체적인 통제를 운영체제가 하는 것이다.
4. 인터럽트(Interrupt)
- 인터럽트
- 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.(2) Interrupt(넓은 의미)
- Interrupt(하드웨어 인터럽트): 하드웨어가 발생시킨 인터럽트
- Trap(소프트웨어 인터럽트)
- Exception: 프로그램이 오류를 범한 경우
- System call: 프로그램이 커널 함수를 호출하는 경우
- Trap(소프트웨어 인터럽트)
인터럽트 관련 용어
- 인터럽트 벡터
- 해당 인터럽트의 처리 루틴 주소를 가지고 있음
- 인터럽트 처리 루틴(=Interrupt Service Routine. 인터럽트 핸들러)
- 해당 인터럽트를 처리하는 커널 함수
- → 각각의 인터럽트마다 해야 할 일은 다를 것. 각각의 인터럽트 마다 해야 할 일이 운영체제에 정의되어 있음. 그러한 코드를 인터럽트 처리 루틴이라고 한다. 그리고 그 인터럽트 처리 루틴이 저장된 함수의 주소가 인터럽트 벡터에 적혀져 있다.
5. 입출력(I/O)의 수행
- 모든 입출력 명령은 특권 명령
- 사용자 프로그램은 어떻게 I/O를 하는가?
- 시스템콜(system call) : 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
- 사용자 프로그램은 운영체제에게 I/O 요청
- trap을 사용하여 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 올바른 I/O 요청인지 확인 후 I/O 수행
- I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김
시스템 콜
- 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것.