컴퓨터 시스템의 동작 원리
04 Feb 2020 | OS‘운영체제와 정보기술의 원리’ 3장을 학습한 내용을 정리한 포스팅입니다
컴퓨터 시스템의 동작 원리
컴퓨터 시스템의 구조
- 컴퓨터 시스템 구조
- 내부 장치 : CPU, 메모리
- 외부 장치 : 디스크, 키보드, 마우스, 모니터 …
- 컴퓨터 내부로 데이터가 들어오는것을 입력(input) 컴퓨터 외부로 데이터가 나가는 것이 출력(output)
- 키보드로부터 입력을 받아서 컴퓨터가 어떤 연산을 한 후 그 결과를 모니터에 출력하는 경우가 대표적인 입출력(I/O)
- 컴퓨터 외부 장치를 입출력 장치라고 부른다
- 컴퓨터 하드웨어 장치에는 컨트롤러라는 것이 붙어 있다. 컨트롤러는 일종의 작은 CPU로서 각각의 하드웨어를 제어한다
CPU와 I/O 연산
-
입출력 장치와 메인 CPU는 동시 수행이 가능하다
-
CPU가 A프로그램 코드를 실행 중이고, B라는 프로그램은 하드 디스크에서 어떠한 정보를 읽어오는 작업을 수행하는 상황을 생각해볼 수 있다
-
각 장치마다 이를 제어하기 위해 설치된 장치 컨트롤러에는 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 로컬 버퍼가 존재한다
-
디스크나 키보드 등에서 데이터를 읽어오는 경우, 우선 로컬 버퍼에 데이터가 임시로 저장된 후 메모리에 전달된다. 장치에서 로컬 버퍼로 읽어오는 일은 컨트롤러가 담당한다
-
원하는 데이터를 로컬 버퍼로 다 읽어오고 나면, 컨트롤러가 CPU에게 인터럽트를 발생시켜 작업이 완료됐음을 알린다
인터럽트란?
컨트롤러들이 CPU의 서비스가 필요할때 이를 통보하는 방법 (하드웨어 인터럽트)
소프트웨어 인터럽트는
트랩
이라는 용어로도 불리며예외
,시스템 콜
등이 있다예외
- 0으로 나누는 연산, 자신의 메모리 영역 바깥 부분을 접근하려는 시도 등등시스템 콜
- 프로그램이 자신이 작성하지 않은 코드를 운영체제로부터 서비스 받기 위해 발생시키는 것CPU옆에는 인터럽트 라인이 있어서, CPU가 자신의 작업을 하던 중간에 인터럽트 라인에 신호가 들어오면 하던 일을 멈추고, 인터럽트와 관련된 일을 처리한다. 좀더 정확히 설명하면 CPU는 명령 하나를 수행할 때마다 인터럽트가 발생했는지를 체크하게 된다.
-
인터럽트의 일반적 기능
- 운영체제 커널에는 인터럽트가 들어왔을 때 해야 할일을 미리 다 프로그래밍해서 보관하고 있다. 이를 인터럽트 서비스 루틴이라고 한다
인터럽트 핸들링(=인터럽트 서비스 루틴)
- 다양한 인터럽트에 대해 각각 처리해야 할 업무들을 정의하고 있다. 디스크 컨트롤러가 인터럽트를 발생시키면 CPU는 하던 일을 잠시 멈추고 이 인터럽트가 발생했을 때 수행해야 할 코드 영역으로 가서 정의된 일을 수행하게 된다. 이떄 수행하는 구체적인 일들은 다음과 같다.
- 프로그램 A가 수행되고 있을 때 인터럽트가 발생하면 A의 현재 상태를 저장한다. 현재 상태란 현재 CPU가 수행중이던 메모리 주소를 포함해 몇 가지 부가적인 정보들을 의미한다.
- 커널 영역에는 현재 시스템 내에서 수행되는 프로그램들을 관리하기 위한 자료구조인 프로세스 제어 블록(PCB) 이 존재한다
- PCB의 일부분은 인터럽트가 발생했을 때 프로그램의 어느 부분이 수행되던 중이었는지를 저장하기 위한 자료구조로 이용된다. 이 부분에 저장되는 내용으로는 현재 수행중이던 메모리 주소와 레지스터 값, 그리고 하드웨어 상태 등이 있다. 이러한 정보가 저장되었다가 인터럽트 수행이 끝나면 저장된 값을 CPU 상에 다시 복원해 인터럽트 당하기 직전의 명령을 계속 수행할 수 있게 되는 것이다.
- 원칙적으로 인터럽트 처리 중에 또 다른 인터럽트가 발생하는 것을 허용하지 않지만 인터럽트의 중요도에 따라 예외 상황이 발생할 수 있다
- 커널에 들어가는 동안 현재 실행중인 프로세스의 컨텍스트(CPU의 모든 레지스터의 값)가 먼저 메모리에 저장된다.
- 예외 / 인터럽트를 처리한다.
- 복원 및 재개할 프로세스를 선택한다.
- 선택한 프로세스의 컨텍스트를 복구한다.
- 선택한 프로세스의 실행을 재개한다.
Synchronous I/O vs Asynchronous I/O
- 동기식 입출력(Synchronous blocking I/O)을 사용하면 입출력이 완료될 때까지 CPU는 다음 명령을 수행할 수 없기 때문에 비동기식 입출력(Asynchronous blocking I/O)을 사용하는 것이 효율적이다. 해당 문맥에서 말하는 Asynchronous는 CPU입장에서의 의미이고, 프로그램 입장에서는 Synchronous를 의미한다.
- 같은 자원에 대한 입출력이 동시에 발생할 수 있으므로 동기성을 보장하기 위해 장치마다 큐를 두어 요청된 순서대로 처리할 수 있도록 한다
DMA(Direct Memory Access)
- 일종의 컨트롤러로서, CPU가 주변 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주는 역활을 한다
- DMA를 사용하면 로컬 버퍼에서 메모리로 읽어오는 작업을 CPU가 담당하는 것이 아니라 DMA가 대행함으로써 CPU는 원래 하던 작업을 멈추고 인터럽트를 처리할 필요가 없어지는 것이다.
Dual mode operation
- 사용자 프로세스로부터 운영체제를 보호하기 위해 하드웨어 차원에서 유저모드와 커널모드가 존재한다
- 유저모드에서 제한된 명령은 커널모드에 위임하여 처리한다(보안과 관련된 명령)
- 커널모드가 더 큰 권한을 가지며, CPU 내부의 모드 비트를 두어 시스템 콜을 호출할 때는 0으로 전환되고 운영체제가 모든 요청을 끝낸 후에는 1로 변경하여 사용자 프로그램에게 CPU 선점권을 넘겨준다
ref. 운영체제와 정보기술의 원리
ref. Uppsala university
ref. 동기식 vs 비동기식, blocking vs non-blocking
ref. non-blocking IO, non-blocking Algorithm
ref. Boost application performance using asynchronous I/O
ref. wiki