2.1 OS의 목적
- 운영체제
- 사용자와 컴퓨터 사이의 가교역할을 한다고 하였는데, 이것은 사용자가 컴퓨터를 보다 편리하게 사용할 수 있도록 해 주어야 한다는 것을 의미
- 하드웨어가 가지는 능력을 발휘되도록 제어한다고 하였는데, 이것은 컴퓨터 시스템의 자원들을 효율적으로 사용될 수 있게 해야 한다는 말
- 사용자의 편리성과 자원의 효율적 사용이 그 목적
- 효과적인 점검과 개발이 가능하고, 새로운 기능들이 추가될 수 있도록 만들어져서 사용자에게 보다 나은 서비스를 제공할 수 있도록 만들어져야 할 것
- 다른 각도에서 좀 더 설명하자면
- 운영체제를 사용하는 사람들의 입장에서는 사용하기 쉽고 편리하며, 배우기 쉽고 신뢰할 수 있으며 빨라야 한다는 것
- 만드는 사람의 입장에서는 운영체제가 설계, 유지, 보수가 쉽고 적응성이 좋으며 오류 없이 효율적이어야한다는점
2.2 몇 가지 상식
- 부팅
- 전원 버튼이 눌려져 커널이라고 불리는 운영체제의 일부가 메모리에 올라와 실행되어 장치들을 준비시키고, 각종 레지스터 값을 초기화하고 나서 사용자의 입력을 받을 준비를 마치는 단계
- 부트 프로그램 또는 부츠트랩 로더(Bootstrap Loader)라는 프로그램이 대개 ROM에 저장되어 있어 전원이 켜지면 무조건 제일 먼저 실행되어지도록 하는데, 이것의 역할은 커널을 찾아 메모리에 올린 후 커널을 실행시켜 주는 것
- 어떤 시스템에서는 ROM에 있는 부츠트랩 로더는 더 단순한 기능만을 가지게 하고, 커널을 메모리에 올려줄 부트 프로그램은 따로 디스크에 있어서 부츠트랩 로더가 먼저 부트 프로그램을 메모리에 올려 실행 시키면 부트 프로그램이 커널을 올려 실행시켜주는 방식을 취한다
- 레지스터
- 메모리보다 빠른 기억장치이지만 크기가 작아서 시스템과 사용 목적에 따라 8비트, 16비트, 32비트 등의 크기를 가짐
- 데이터, 주소, 조건 코드 등을 저장
- PSW (Program Status Word) 레지스터
- CPU의 현재 상태 정보를 저장
- 조건 코드, 인터럽트 가능/불가능, 현재 실행모드 등
- CPU의 현재 상태 정보를 저장
- 명령어 처리 : instruction cycle
2.3 인터럽트
- 컴퓨터 시스템에 존재하는 각 자원(장치)들의 현 상태를 파악하는 방법
- 폴링, 인터럽트
- 폴링(Polling)
- CPU가 일정한 시간 간격을 두고 각 자원들의 상태를 주기적으로 확인하는 방식
- 자원들은 폴링 신호를 받은 후 자신의 상태나 원하는 바를 CPU에게 알려주게 될텐데, 이 경우의 문제는 폴링의 간격을 적절히 정해야하는 문제와 각 자원들은 직전 폴링 이후 변화된 자신의 상태를 다음번 폴링 때까지는 알릴 수 없다는 점
- 아무 일이 없는데도 CPU는 폴링에 일정량의 시간을 들여야하는 부담이 발생
- 인터럽트(Interrupt)
- 각 자원들이 능동적으로 자신의 상태변화를 CPU에게 알리는 방식
- CPU는 따로 시간을 들이지 않아도 되고, 자원들은 상황이 발생하면 즉시 알려 처리할 수 있으니 폴링보다 훌륭한 방식
- 오늘날 거의 대부분 시스템에서 채택하여 사용
- 인터럽트의 종류
- 하드웨어 인터럽트 : 하드웨어 자원 즉, 장치 또는 주변장치들로부터의 인터럽트
- 소프트웨어 인터럽트 : CPU 스스로 자신에게 인터럽트를 해야 할 때가 있는데, 이것은 실행중인 명령어 때문에 생기는 일이니까 소프트웨어 인터럽트라 함
- 예) 명령어 오류(0으로 나눔, 다른 사용자 주소 참조 등), 시스템 호출
- 트랩 : CPU 스스로 자신에게 인터럽트 하는 것
- 인터럽트의 처리 시기 : 명령어 실행을 마친 후
- 트랩은 실행 중에 처리됨
- 인터럽트 처리 과정
- 장치가 인터럽트 신호를 CPU에게 보냄
- CPU는 실행 중인 명령어를 완료시키고 인터럽트 신호를 확인
- 현재 수행 중인 프로그램의 상태정보를 시스템 스택에 저장(상태 정보란 PSW, PC의 내용)
- PC에 인터럽트 처리 루틴의 시작 주소를 넣음 → 처리 루틴이 실행됨
- 처리 루틴은 먼저 CPU에 있는 레지스터들의 값을 저장한 후 필요한 처리 루틴 실행
- 인터럽트 처리가 끝나면 이전에 저장해 둔 레지스터들의 값을 다시 레지스터 원위치시킴
- PSW와 PC의 저장된 값을 원래대로 재저장
- 인터럽트가 걸린 다음 명령어부터 실행 재개됨
- 중첩된 인터럽트 처리
- 순차처리
- 중첩처리
2.4 기억장치의 계층적 구조(Storage hierarchy)
2.5 I/O 방식
- 입출력 장치에는 컨트롤러와 입출력 데이터를 저장 할 버퍼가 있다
- CPU의 개입 정도에 따른 입출력 방식의 분류
- 프로그램에 의한 입출력
- 인터럽트에 의한 입출력
- 메모리에 직접 접근하는 입출력
- 프로그램에 의한 입출력(Programmed I/O)
- CPU는 입력을 지시한 후, 한 워드가 컨트롤러의 버퍼에 입력됐는지를 계속해서 확인하도록 하는 방식
- 인터럽트라는 수단이 필요없는 대신 CPU가 지속적으로 완료 여부를 확인해야 한다 ⇒ CPU 사용의 낭비
- 인터럽트에 의한 입출력(Interrupt-driven I/O)
- 입력을 지시한 후, 한 워드의 입력이 이루어지는 사이에 CPU는 다른 작업에 활용되어지며, 입력의 완료 시에 인터럽트를 통해 CPU에게 알리는 방식
- 메모리에 직접 접근하는 입출력(Direct Memory Access, DMA)
- CPU는 입출력할 데이터의 시작주소와 크기 등을 채널에게 알려주고 다른 작업에 동원되어지며, 이때부터 입출력은 채널의 주도하에 이루어짐
- 채널 : 입출력 작업을 전담하는 프로세서
- 시스템에서 한 번의 입출력 단위를 블록(Block)라고 부르는데 채널은 블록 단위로 CPU에게 인터럽트를 보내 처리
- 채널이 직접 메모리를 엑세스한다 : memory cycle stealing 필요
- CPU는 입출력할 데이터의 시작주소와 크기 등을 채널에게 알려주고 다른 작업에 동원되어지며, 이때부터 입출력은 채널의 주도하에 이루어짐
- 입출력을 위한 하드웨어의 구성에 따른 분류
- 독립적인 입출력
- 메모리 주소지정 입출력(memory-mapped)
- 독립적인 입출력(Isolated IO)
- 입출력 장치들이 입출력 버스를 통해 CPU와 연결되어 있는 경우
- 입출력은 입출력을 담당하는 명령어를 통해 실행
- 입출력 버스를 통해 해당 장치의 지정, 데이터의 전송, 입출력을 구분해주는 제어값이 전달
- 메모리 주소지정 입출력(Memory-mapped IO)
- 입출력 장치들이 메모리와 함께 메모리 버스에 연결되어 있으며, 입출력을 위한 명령어를 따로 두어 사용하지 않고 메모리에 대한 명령어(MOVE, LOAD등)를 사용하여 실제 입출력을 하게 되는 방식
이 글은 <OS? Oh Yes! 누워서 보는 운영체제 이야기> 교재를 바탕으로 공부하여 정리한 글입니다.
'운영체제' 카테고리의 다른 글
[OS] Chap 01. 운영체제란? (0) | 2024.04.08 |
---|