컴퓨터 시스템의 구조
1. 컴퓨터 시스템의 구조
- 컴퓨터 시스템의 구조는 컴퓨터의 내부장치인 CPU, 메모리와 컴퓨터 외부 장치인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구성된다.
- 컴퓨터는 외부장치에서 내부장치로 데이터를 읽어와 각종 연산을 수행하며 그 결과를 외부장치로 다시 내보내는 방식으로 업무를 처리한다.
- 메모리 및 입출력장치 등의 각 하드웨어 장치에는 컨트롤러라는 것이 붙어 있다. 컨트롤러는 일종의 작은 CPU로서 컴퓨터 전체에 CPU라는 중앙처리장치가 있듯이 컨트롤러는 각 하드웨어 장치마다 존재하면서 이를 제어한다.
2. CPU 연산과 I/O 연산
- 컴퓨터에서 연산을 한다는 것은 CPU가 무언가 일을 한다는 뜻이며, 입출력 장치들의 I/O 연산은 입출력 컨트롤러가 담당하고 컴퓨터 내에서 수행되는 연산은 메인 CPU가 담당한다. 이때 입출력장치와 메인 CPU는 동시에 수행이 가능하다.
- 각 장치마다 이를 제어하기 위해 설치된 장치 컨트롤러는 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리를 가지고 있으며 이를 로컬 버퍼라고 한다.
- 디스크나 키보드 등에서 데이터를 읽어오는 경우, 우선 로컬버퍼에 데이터가 임시로 저장된 후 메모리에 전달되며 이 때 장치에서 로컬버퍼로 읽어오는 일을 컨트롤러가 담당한다. 이때, 로컬 버퍼로 읽어오는 작업이 끝났는지를 메인 CPU가 지속적으로 체크하는 것이 아니라 장치에 있는 컨트롤러가 인터럽틀르 발생시켜 CPU에 보고하게 된다.
- 인터럽트란 컨트롤러들이 CPU의 서비스가 필요할 때 이를 통보하는 방법을 말하며, 기본적으로 CPU는 매 시점 메모리에 대한 명령(instruction)을 하나씩 읽어와서 수행한다. 이때 CPU 옆에는 인터럽트 라인이 있어서, CPU가 자신의 작업을 하던 중간에 인터럽트 라인에 신호가 들어오면 하던 일을 멈추고 인터럽트와 관련된 일을 먼저 처리한다.
- 인터럽트는 키보드 입력 혹은 요청된 디스크 입출력 작업의 완료 등 CPU에 알려줄 필요가 있는 이벤트가 일어난 경우 컨트롤러가 발생시키는 것이다.
- 예를 들어 디스크 컨트롤러가 인터럽트를 발생시키면 CPU는 하던 일을 잠시 멈추고 이 이터럽트가 발생했을 때 수행하도록 정의된 코드를 찾아 수행하며 디스크의 로컬 버퍼에 있는 내용을 사용자 프로그램의 메모리로 전달하고, 해당 프로그램이 CPU를 할당받을 경우 다음 명령을 수행할 수 있음을 표시해둔다.
3. 인터럽트의 일반적 기능
- 운영체제 커널에는 인터럽트가 들어왔을 때 해야할 일이 미리 다 프로그래밍되어 커널 내에 그 코드가 보관되어 있다. 운영체제는 각종 하드웨어 및 소프트웨어 자원 관리뿐 아니라 사용자 프로그램에 필요한 서비스도 제공한다. 또한 운영체제 커널 내에 있는 인터럽트 처리루틴은 다양한 인터럽트에 대해 각각 처리해야 할 업무들을 정의한다.
- 인터럽트에는 하드웨어 인터럽트와 소프트웨어 인터럽트가 있다. CPU의 서비스가 필요한 경우, CPU 옆에 있는 인터럽트 라인에 신호를 보내서 인터럽트가 발생했음을 알려주는 방식은 둘 다 동일하다.
- 하지만 하드웨어 인터럽트는 컨트롤러 등 하드웨어 장치가 CPU의 인터럽트 라인을 세팅하는 반면, 소프트웨어 인터럽트는 소프트웨어가 그 일을 수행한다는 차이점이 있다.
- 일단 인터럽트가 발생하면 CPU는 하던 일을 멈추고 운영체제 커널 내에서 해당 인터럽트의 처리를 위해 정의된 코드를 찾게 되며 운영체제는 할 일을 쉽게 찾아가기 위해 인터럽트 벡터를 가지고 있다.
- 인터럽트 벡터란 인터럽트 종류마다 번호를 정해서 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키고 있는 자료구조를 말한다. 실제 처리해야 할 코드는 인터럽트 처리루틴 또는 인터럽트 핸들러라고 불리는 다른 곳에 정의된다.
- 통상적으로 인터럽트라고 하면 하드웨어 인터럽트를 의미하고, 소프트웨어 인터럽트는 트랩(trap).이라는 용어로 주로 불린다. 소프트웨어 인터럽트의 예로는 예외상황(exception)과 시스템 콜(system call)이 있다.
- 예외상황이란 사용자 프로그램이 0으로 나누는 연산 등 비정상적인 작업을 시도하거나, 자신의 메모리 영역 바깥에 접근하려는 시도 등 권한이 없는 작업을 시도할 때 이에 대한 처리를 위해 발생시키는 인터럽트를 말한다.
- 시스템콜이란 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스를 요청하는 방법이다. 사용자 프로그램 자신의 코드는 직접 CPU를 가지고 실행하지만, 사용자 프로그램에 정의되지 않고 운영체제 커널에 있는 코드를 사용자 프로그램이 실행하고자 할 때에는 인터럽트 라인 세팅을 통해 CPU 제어권을 운영체제로 넘겨 실행하게 되는 것이다.
4. 인터럽트 핸들링
- 인터럽트 핸들링(interrupt handling)이란 인터럽트가 발생한 경우에 처리해야 할 일의 절차를 의미한다.
- 프로그램 A가 실행되고 있을 때 인터럽트가 발생하면 A의 현재 상태, 즉 현재 CPU에서 실행 중인 명령의 메모리 주소를 포함해 몇 가지 부가적인 정보들을 저장한다. CPU에서 명령이 실행될 때에는 CPU 내부에 있는 임시 기억장치인 레지스터(register)에 데이터를 읽거나 쓰면서 작업을 하는데 이때 인터럽트가 발생해 새로운 명령을 실행하면 기존의 레지스터 값들이 지워지게 되므로 CPU 내의 이러한 상태를 저장해두어야 한다. 이것들을 모두 저장한 후 인터럽트 처리가 이루어질 수 있다.
- 운영체제는 현재 시스템 내에서 실행되는 프로그램을 관리하기 위해 프로세스 제어블록(PCB;Process Control Block)이라는 자료구조를 둔다. PCB는 각각의 프로그램마다 하나씩 존재하며 해당 프로그램의 어느 부분이 실행 중이었는지를 정하고 있다. 구체적으로는 프로그램이 실행 중이던 코드의 메모리 주소와 레지스터값, 하드웨어 상태 등이 저장된다.
- 시스템 부팅 후 정상 상태에 머무리면 CPU가 항상 프로그램에 의해 사용되며 인터럽트가 발생할 때에만 운영체제 코드 부분으로 CPU가 이양되어 인터럽트 처리를 수행하게 된다. 결론적으로 운영체제가 직접 CPU를 점유하는 경우는 인터럽트에 의하지 않고는 발생하지 않는다.
출처 : (http://www.kocw.net/home/m/search/kemView.do?kemId=1046323)
- 강의 : 이화여자대학교, 반효경 (운영체제)
- 책 : 운영체제와 정보기술의 원리 [반효경]
위 강의와 책을 보며 공부한 내용을 기록하였습니다.
'CS > 운영체제' 카테고리의 다른 글
프로세스와 스레드의 차이 (1) | 2022.09.11 |
---|---|
컴퓨터 시스템의 동작 원리-3 (0) | 2021.10.28 |
컴퓨터 시스템의 동작 원리-2 (0) | 2021.10.28 |
운영체제(OS)의 자원 관리 기능 (0) | 2021.10.28 |
운영체제(OS)에 대하여 (0) | 2021.09.27 |