본 글은 반효경 교수님의 운영체제 강의를 들으며 정리하는 글 입니다.
1. 컴퓨터 시스템의 구조
1 - 1) 큰 흐름
컴퓨터 시스템의 구조는 컴퓨터 내부 장치인 CPU, 메모리 와 컴퓨터 외부 장치(입출력 장치)인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구분된다.
컴퓨터는 외부 장치에서 내부 장치로 데이터를 읽어와 (input) 각종 연산을 수행한 후, 그 결과를 외부 장치로 내보내는(output) 방식으로 업무를 처리한다.
1 - 2) 각 요소 살펴보기
우선 다음 그림을 살펴보자!
1 - 2 - 1) CPU
CPU는 클럭마다 메모리에서 명령(Instruction)을 하나씩 읽어서 실행하는 역할을 한다. 계속 인스트럭션을 읽어나가야 하는 운명이다.
IO가 일어나면 CPU가 직접 접근하지 않고 Device Controller에게 시킨다.
위 그림에서 3-1 에 해당되는 동그라이가 Device Controller에 해당된다.
이렇게 Device Controller에게 시키는 이유는 CPU에 비해 디바이스 속도가 매우 느리기 때문이다. (최대 100만배 느림)
▶ 접근 범위
CPU는 메인 메모리와 register에 접근이 가능하다. (CPU 내부에는 register라는 메모리 보다 더 빠른 저장소가 있다)
▶ 인터럽트 라인 (Interrupt Line)
CPU가 자신의 작업을 하던 중간에 인터럽트 라인에 신호가 들어오면 하던 일을 멈추고 인터럽트와 관련된 일을 먼저 처리한다.
▶ 레지스터 (Register)
CPU 내부에 메모리보다 더 빠르면서 정보를 저장할 수 있는 작은 공간이다.
레지스터 중에 메모리 주소를 가리키는 레지스터인 PC (Program Counter) 레지스터(그림 8번)가 있다.
CPU는 PC 레지스터가 가리키는 메모리 위치에서 인스트럭션을 읽어서 수행한다.
▶ Mode bit
CPU에서 실행되는 것이 운영 체제인지 사용자 프로그램인지 구분해 준다.
- 1 (사용자 모드) - 사용자 프로그램
- 사용자 프로그램이 CPU 가질 때는 제한된 인스트러션만 실행시킬 수 있다.
- 만약 Mode bit라는 요소가 없었다면, 사용자가 프로그램에서 하드웨어를 직접 접근하여 보안에 취약해 질 수 있다.
- 0 (커널 모드) - 운영 체제
- 운영 체제가 CPU를 점유할 때는 모든 인스트럭션을 실행할 수 있다. (모니터 모드 혹은 시스템 모드라고 부른다.)
1 - 2 - 2) Memory
랜덤 액세스 메모리(Random Access Memory) 즉, 램(RAM)은 임의의 영역에 접근하여 읽고 쓰기가 가능한 주기억 장치다
메모리는 CPU가 직접 접근할 수 있는 내부 기억 장치로서 특정 프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야 한다.
운영 체제는 컴퓨터가 부팅되었을 때 메모리에 올라가 있는데, 메모리에 상주하고 있는 CPU의 작업 공간을 Main Memory라고 부른다.
1 - 2 - 3) Device Controller
메모리 및 입출력 장치 등의 각 하드웨어 장치에는 Device Controller라는 것이 있다.
해당 device를 총괄하는 일종의 작은 CPU로서, 각 하드웨어 장치를 제어하는 역할을 수행하게 된다.
▶ Local Buffer (그림 3-2)
메인 CPU의 작업 공간인 메인 메모리가 있듯이 디바이스 컨트롤러도 데이터를 임시로 저장하기 위한 작업 공간이 필요한데, Local Buffer가 그 역할을 한다.
참고로 Device Driver도 있는데, 이는 CPU가 실행하는 각 디바이스에 접근하기 위한 소프트웨어, 인터페이스를 의미한다.
1 - 2 - 4) 인터럽트
CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외 상황이 발생하여 처리가 필요한 경우에 CPU에게 알리는 일종의 이벤트를 뜻한다.
만약 이렇게 중간에 알리지 않는다면 CPU는 외부 요청이 온지 모르고 묵묵히 자식의 작업을 수행한다.
좁은 의미의 인터럽트는 하드웨어 인터럽트를 의미하지만, 넓은 의미의 인터럽트는 소프트웨어 인터럽트까지 포함한다.
소프트웨어 인터럽트는 Trap이라고도 부르며, 프로그램이 오류를 발생하여 Exception이 발생하거나, 시스템 콜을 통해 커널 함수를 호출할 때 발생한다.
▶ 하드웨어 인터럽트 vs 소프트웨어 인터럽트
CPU 인터럽트 라인에 신호를 보내서 인터럽트를 알려주는 방식은 똑같다.
다만 하드웨어 인터럽트는 키보드, 디스크 등 하드웨어 장치가 CPU의 인터럽트 라인을 세팅하는 반면, 소프트웨어 인터럽트는 소프트웨어가 CPU의 인터럽트 라인을 세팅한다.
예를 들어 우리가 C프로그래밍을 할때 scanf로 입력을 받는 부분은 소프트웨어를 통해 키보드 디바이스를 사용하기 위해서,
직접 접근하는것이 아니라 OS가 디바이스에 요청을 하도록 인터럽트를 통해 CPU를 OS에 할당할수가 있다.
▶ 인터럽트 처리 루틴 (인터럽트 핸들러)
실제 해당 인터럽트를 처리해야 할 코드를 인터럽트 처리 루틴 혹은 인터럽트 핸들러라고 부른다.
인터럽트 처리 루틴을 통해 해당하는 인터럽트 처리를 완료하고 나면 원래 수행하던 작업으로 돌아갈 위치를 알아야 하므로 인터럽트 처리 전에 수행 중이던 작업이 무엇이었는지 반드시 저장해야 하는데, 이러한 정보를 저장히기 위해 운영 체제는 PCB라는 공간을 별도로 가지고 있다.
▶ 인터럽트 벡터
해당 인터럽트 처리 루틴의 주소를 저장하고 있는 자료구조이다.
운영 체제는 할 일을 쉽게 찾아가기 위해 이러한 인터럽트 벡터를 가지고 있는데, 인터럽트 벡터를 통해 인터럽트 종류마다 번호를 정해서 번호에 따라 처리해야 할 코드가 위치한 부분을 인식할 수 있게된다.
1 - 2 - 5) Timer
사용자 프로그램에서 while문으로 무한 루프를 돌게 된다면 특정 프로그램이 CPU를 독점할 수 있다.
Timer는 특정 프로그램이 CPU를 독점하는 것을 막기 위한 하드웨이다.
▶ 동작
컴퓨터를 시작하면 처음에 운영 체제가 CPU를 가지고 있다가 사용자 프로그램에게 CPU를 넘겨준다.
하지만 그냥 넘겨 주지 않고 Timer에 값을 세팅하고 넘겨 주게 된다. 시간이 지나서 Timer의 값이 0이 되면 타이머 인터럽트가 발생하여 다른 프로그램에게 CPU를 넘겨준다.
1 - 2 - 6) DMA (Direct Memory Access) Controller
원칙적으로 메모리는 CPU에 의해서만 접근할 수 있는 장치이다.
CPU 외의 장치가 메모리의 데이터에 접근하기 위해서는 CPU에게 인터럽트 발생시켜 CPU가 대신 컨트롤러의 로컬 버퍼와 메모리 사이에서 데이터를 옮겨 준다.
하지만, 작업 처리 속도가 매우 빠른 CPU가 인터럽트를 많이 요청 받으면 비효율적이다.
그래서 CPU 이외에 메모리 접근이 가능한 DMA 컨트롤러를 추가한 것 이다.
DMA를 사용하게 되면 로컬 버퍼에서 메모리로 읽어오는 작업을 CPU 대신 수행해 줄 수 있다.
이때, DMA는 바이트 단위가 아니라 블록이라는 큰 단위로 정보를 메모리로 읽어온 후에 인터럽트를 발생시켜서 작업 완료 신호를 CPU에게 보낸다. 이러한 방식으로 CPU에 발생하는 인터럽트의 빈도를 줄여 CPU를 효울적으로 이용할 수 있다.
다만, CPU와 DMA가 동시에 메인 메모리에 접근할 수 있다는 문제점이 있어서 누가 메모리에 먼저 접근하게 만들지 Memory Controller가 교통 정리하는 역할을 한다.
1 - 2 - 7) 입출력 I/O의 수행
모든 입출력 명령은 운영 체제만 사용할 수 있는 특권 명령으로만 가능하다.
그렇다면 사용자 프로그램은 어떻게 I/O를 할 수 있을까? 바로, 시스템 콜을 활용한다.
시스템 콜은 운영 체제에게 I/O를 요청하는 것을 말한다. 운영 체제의 서비스를 받기 위해 커널이 지원하는 함수를 호출하는 것 이다.
▶ 동작
Mode bit가 1인 상태로 사용자 프로그램이 실행되고 있다가 I/O를 해야 하는 상황이 오면 직접적으로 OS의 주소지에 접근할수가 없다.
따라서 프로그램이 직접 인터럽트 라인을 세팅 한 후, CPU에게 인터럽트를 보내면, CPU는 다음 인스트럭션을 수행하는 대신 mode bit를 0으로 바꾸고 CPU 제어권을 OS로 넘기게 된다.
이렇게 되면 OS가 사용자 프로그램이 필요로 한 I/O작업을 수행하게 된다.
2. 출처
http://www.kocw.net/home/cview.do?cid=3646706b4347ef09
'CS > OS (2022-1)' 카테고리의 다른 글
[OS] Process Management (0) | 2022.11.22 |
---|---|
[OS] Process - 2 (0) | 2022.11.21 |
[OS] Process - 1 (0) | 2022.11.21 |
[OS] System Structure & Program Execution 2 (0) | 2022.11.20 |
[OS] Introduction to Operating Systems (0) | 2022.11.18 |
댓글