티끌모아 태산

컴퓨터 시스템의 동작 원리 본문

CS 지식/운영체제

컴퓨터 시스템의 동작 원리

goldpig 2023. 7. 26. 13:36
728x90

컴퓨터 시스템의 구조

  컴퓨터 시스템의 구조는 일반적으로 컴퓨터 내부장치인 CPU, 메모리와 컴퓨터 외부 장치인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구성된다. 이때, 컴퓨터는 외부장치에서 내부장치로 데이터를 읽어(input)와 각 종 연산을 수행한 후 그 결과를 다시 외부장치로 내보내는(output) 방식으로 업무를 수행한다. 예를들어, 키보드로부터 입력을 받아 컴퓨터가 연산을 한 후 결과를 모니터에 출력하는 것 혹은 디스크에서 내용을 읽어 처리후 디스크에 데이터를 저장하는 등이 해당된다. 

 

  운영체제는 컴퓨터가 부팅되었을 때부터 항상 수행되면서 각종 자원을 관리해야하므로 메모리에 항상 올라와 있어야한다. 그러나 운영체제의 코드가 모두 메모리에 올라오면 메모리 낭비가 발생하기 때문에 운영체에의 핵심인 '커널(kernel)'만 메모리에 상주시킨다.

 

⭐️커널이란? 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하며 응용 프로그램이 하드웨어로부터 오는 자원을 관리하고 사용할 수 있도록 해주는 역할을 한다. 커널의 기능은 크게 다음과 같다.

  • 프로세스 관리: 프로세스의 생성과 삭제를 담당. 스케줄러를 이용하여 여러 프로세스 동작을 제어한다.
  • 메모리 관리: 각 프로세스가 독립적으로 사용할 수 있는 가상 주소 공간을 제공. 이때, 가상 주소 공간이란 프로세스가 실행되는 물리 메모리의 실제 주소를 가리키는 주소들의 집합, 가상 주소를 물리 주소로 매핑하며 실행된다.
  • 파일 시스템 관리: 시스템에 동작하는 모든 자원을 파일처럼 다룰 수 있도록 인터페이스를 제공.

CPU 연산과 I/O 연산

  컴퓨터가 연산을 한다는 것은 CPU가 어떤 일을 수행한다는 뜻인데, 입출력 장치들의 I/O연산은 입출력 컨트롤러가 담당하고, 컴퓨터 내에서 연산은 메인 CPU가 담당한다. *컨트롤러란 일종의 작은 CPU로서, 각 하드웨어 장치마다 존재하면서 이들을 제어하는 역할을 한다. ex) 메모리를 제어하는 컨트롤러를 메모리 컨트롤러, 디스크를 제어하는 컨트롤러를 디스크 컨트롤러라고 한다.

  한편, 각 장치마다 이를 제어하기 위해 설치된 장치 컨트롤러는 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리를 갖고 있는데, 이를 로컬 버퍼라고 한다. 즉, [컨트롤러] <-> [로컬버퍼] <-> [컴퓨터 외부 장치] 

  1. 컴퓨터 외부장치로부터 데이터를 읽어오는 경우 우선, 로컬버퍼에 저장한다.
  2. 로컬버퍼에 저장된 데이터를 컨트롤러가 메인 메모리로 전달한다. 그리고 컨트롤러가 인터럽트를 발생시켜 CPU에게 데이터를 모두 읽어왔다고 보고한다.
  3. 그러면 CPU가 메인 메모리에 접근해서 연산을 수행한다. 

  일반적으로 CPU는 매 시점 메모리에서 명령(instruction)을 하나씩 읽어와서 수행한다. 그리고 명령 하나를 수행할 때마다 인터럽트가 발생했는지 확인한다. CPU옆에는 인터럽트 라인이 있어서 CPU가 작업을 수행하는 도중에 인터럽트 라인에 신호가 들어오면 CPU는 하던일을 멈추고 인터럽트를 먼저 처리하게 된다. 

인터럽트의 일반적인 기능

⭐️인터럽트란 일반적으로 프로그램을 실행하는 도중에 예기치 않은 상황(입출력 요청)이 발생할 경우 현재 실행 중인 작업을 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 보고하는 것으로 외부/내부 인터럽트와 소프트웨어 인터럽트가 있습니다. ⭐️우선 순위는 다음과 같다.

  1. 외부 인터럽트: 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생하는 인터럽트
  2. 내부 인터럽트: CPU내부에서 인터럽트에 걸리는 경우로 ex) 잘못된 명령이나 데이터를 사용할 때 발생
  3. 소프트웨어 인터럽트(트랩): 소프트웨어가 발생시키는 인터럽트로 ex) System Call, 사용자 프로그램이 0으로 나누는 연산

  원칙적으로는 인터럽트 처리 중에 또 다른 인터럽트가 발생하는 것을 허용하지 않는다. 하지만 경우에 따라 예외가 발생할 수 있다. 예를들어, 인터럽트가 발생해 현재 인터럽트 처리루틴을 수행하고 있지만, 그보다 더 시급하거나 CPU를 당장 사용해야하는 일이 발생할 수 있기 때문이다. 따라서 현재 처리 중인 인터럽트보다 더 높은 순위의 인터럽트가 발생한다면 현재 처리 중이던 인터럽트 코드의 수행 지점을 저장하고 (커널의 스택 영역에) 우선 순위가 높은 인터럽트를 처리하게 된다. 

  CPU는 일반적으로 매번 프로그램 카운터가 가리키고 있는 명령을 읽어와 처리하는 작업을 수행한다. 그래서 현재 수행중인 프로그램으로부터 CPU를 회수해 CPU가 다른 일을 수행하도록 하기 위해서는 인터럽트 매커니즘이 필요하다. ⭐️인터럽트의 기본적인 동작 과정은 다음과 같다. 

  1. CPU는 메모리에 있는 명령, 정확히는 프로그램 카운터가 가리키고 있는 명령을 읽어와 작업을 수행한다. 
  2. 이때, 인터럽트 요청이 들어온다. ex) I/O interrupt, Timer interrupt, System call, etc. 
  3. CPU는 하던 일을 멈추고 다음 실행할 명령어와 현재 상태를 PCB(Process Control Block) 블록에 저장한다. (*PCB는 각각의 프로그램마다 하나씩 존재하며 해당 프로그램의 어느 부분이 실행중이 었는지 즉, 실행 상태를 저장한다.) -> CPU의 제어권이 사용자 프로그램에서 인터럽트 처리 루틴으로 넘어간다. 
  4. ISR(Interrupt Service Routine)을 실행한다.
  5. 인터럽트 처리 후 기존 상태를 복구한다. *CPU의 제어권이 인터럽트가 발생하기 직전의 프로세스에게 다시 넘어가간다.
  6. 기존 프로그램을 계속 수행한다.

 

 

728x90

'CS 지식 > 운영체제' 카테고리의 다른 글

프로그램의 구조와 실행  (0) 2023.07.28
운영체제 개요  (0) 2023.07.21
iosystems  (0) 2023.06.21