CS 정리 | OS | 2. 컴퓨터시스템의 구조 | kocw 반효경 교수님

Konseo·2023년 9월 6일
0

운영체제

목록 보기
4/19

컴퓨터 시스템의 구조

⚙️ 컴퓨터 시스템 내부 구조에 대해 다시 한 번 짚고 넘어가보자 ⚙️

컴퓨터 전원을 켜면 가장 먼저 OS 커널이 메모리에 상주하게 되며 프로그램 실행 시 메모리에 로드되어 프로세스가 된다.

IO장치들에는 각 IO장치를 전담하는 작은 CPU가 있으며 이는 IO컨트롤러라고 부른다. 또한 각자의 작업 공간을 갖고 있으며 이는 로컬 버퍼 라고 불린다.

CPU의 작업공간은 메모리이며, 메모리 또한 디바이스이기 때문에 이를 전담하는 메모리 컨트롤러가 존재한다. 기본적으로 메모리에 있는 기계어를 읽는다.

❗️OS의 기계어를 읽을 때와 프로그램의 기계어를 읽을 때를 구분지어야한다❓

OS의 경우 CPU를 믿고 맡길 수 있지만 다른 응용프로그램에게 CPU가 넘어가게 되면 해당 프로그램이 악의를 갖고 CPU를 독점할 가능성이 있으며 OS는 이를 제어할 길이 없다.

왜냐하면 OS에서 '제어' 란 자신에게 정의된 기계어를 통해 제어하는 것이고 그것은 CPU에 실행이 될 때 비로소 의미있어지는 것인데, 이미 타프로그램에게 CPU사용권이 넘어가면 통제할 수 없게 되기 때문이다.

따라서 OS의 기계어를 읽을 때와 프로그램의 기계어를 읽을 때는 각각이 조금 다르게 동작하기 때문에 이를 구분하고 있어야하며, 그 장치로 mode bit를 사용한다.

mode bit

  • 응용 프로그램의 잘못된 수행으로 다른 프로그램 및 OS에게 피해가 가지 않도록 하기 위한 보호 장치
  • mode bit 0 : 모니터 모드(커널 모드)
    • OS가 CPU를 사용 중임을 의미
    • 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 바꾸어서 넘겨줌
  • mode bit 1 : 사용자 모드
    • 위험한 기계어(특권명령)는 실행을 못하도록 함. 즉, 특권명령은 OS에서만 사용가능

      🧐 만약 mobe bit이 1인데 특권명령이 실행된다면?
      자동으로 CPU가 OS에게 넘어가게 설계되어있으며(Exception), OS는 해당 응용프로그램에게 응징할 수 있음

registers

  • 기계어 연산한 것을 저장하는 공간
  • 레지스터는 여러개가 있는데 그 중 프로그램 카운터(PC)라는 레지스터는 메모리의 주소를 갖고 있기 때문에 이를 통해 다음에 실행할 기계어의 메모리 주소를 가져올 수 있다.
  • 다시 말하면, PC 레지스터는 CPU에서 기계어 연산이 하나 끝날때마다 다음 메모리 위치를 가리키도록 자동으로 업데이트 하게 된다. 만약 인터럽트 신호가 발생하면 메모리 위치는 OS를 가리키도록 재설정되기도 한다.

timer

만약 프로그램 A가 무한루프를 돌고 있어서 CPU를 독점하고 있다면 어떻게 해야할까. 계속 얘기했듯 OS는 해당 상황을 제어할 수 없다고 하였다. 그러면 어떻게 해결할 수 있을까? 우리는 timer라는 부가적인 HW를 활용할 것이다. ⏰

  • 정해진 시간이 흐른 뒤 OS에게 제어권이 넘어감. 결론적으론 특정 프로그램의 CPU 독점을 막기 위해 쓰임
  • 타이머는 매 클럭 틱 때마다 1씩 감소하다가 0이 되면 인터럽트 발생
  • OS가 타프로그램에게 넘길 때 타이머에 시간을 세팅한 다음 넘겨줌.
  • 타이머는 time sharing을 구현하기 위해 널리 이용되며, 현재 시간을 계산하기 위해서도 사용됨

Interrupt line

  • 매 순간 메모리에서 기계어를 하나씩 읽어 실행한 후, 다음 기계어를 실행하기 전 인터럽트 신호가 있는지를 Interrupt line에서 체크함
  • 신호는 HW에서 올 수도 있고 SW에서 올 수도 있음

인터럽트 발생 유형

📢 누가 인터럽트 신호를 발생시키는가?
보통 대상을 HW와 SW로 나누어서 본다. 여기서 HW는 timer가 될수 있고 디스크나 키보드와 같은 IO장치의 컨트롤러가 될 수 있다. SW는 보통 프로세스(응용 프로그램)를 얘기한다.

  • Interrupt (HW 인터럽트)
    • HW가 발생시킨 인터럽트
  • Trap (SW 인터럽트)
    • Exception : 프로그램이 오류를 범한 경우
    • System call : 프로그램이 커널 함수를 호출하는 경우

시스템 콜 (system call)

modebit를 설명할 때 사용자 모드일 때 특권명령을 사용할 수 없다고 하였다. 그런데 디스크 컨트롤러에게 데이터를 요청하는 등의 IO명령은 특권명령으로 간주된다. 그렇다면 현재 실행중인 사용자 프로그램은 어떻게 해야할까?
.
.
시스템 콜을 하면 된다 😋

  • 사용자 프로그램이 CPU 제어권을 가지고 있을 때 IO명령을 요청할 수 없고 무조건 OS에게 권한을 달라고 부탁해야하는데, 이를 시스템 콜이라고 부름
  • 다시 말하면 사용자 프로그램이 OS의 서비스를 받기 위해 커널 함수를 호출하는 것
  • 따라서 스스로 (자신의 코드를 통해서) 인터럽트를 거는 행위를 함으로써 CPU가 OS에게 넘어갈 수 있도록 함

🙋🏻‍♀️ 정리해봅시다
OS에게 CPU가 다시 넘어오는 경우는 공통적으로 인터럽트 라인을 셋팅하는 경우들을 일컫음. 크게 interrupt(hw), systemcall(sw), exception(sw) 3가지 경우가 있음

👉🏻 더 알아보기

  • IO작업 자체는 컨트롤러인 HW가 수행하는 것
  • 컨트롤러도 결국 HW이기 때문에 일을 제어하고 판단하는 것은 IO디바이스 내 펌웨어라는 SW를 통해 수행 됨

인터럽트 관련 용어

  • 인터럽트 백터
    • 인터럽트 종류 별로 처리해야하는 루틴 주소를 가지고 있음
    • 타이머 인터럽트, 디스크 인터럽트, sw 인터럽트 등등
  • 인터럽트 처리 루틴
    • 주소 뿐만 아니라, 어떤 처리를 해야하는지에 대한 커널 함수 존재
    • interrupt Service Routine, 인터럽트 핸들러라고도 함
  • 인터럽트 당한 시점의 레지스터와 PC를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.

결국, OS는 인터럽트에 의해 구동된다 !

동기식 입출력과 비동기식 입출력

  • 동기식 입출력 (synchronous IO)
    • IO요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에게 넘어감
    • waiing time 존재
    • 구현 방법 1
      • IO가 끝날 때까지 CPU를 낭비시킴
      • 매 시점 하나의 IO만 일어날 수 있음
    • 구현 방법 2
      • IO가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
      • IO 처리를 기다리는 줄에 그 프로그램을 줄 세움
      • 다른 프로그램에게 CPU를 줌
  • 비동기식 입출력 (asynchronous IO)
    • IO가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어 감
  • 두 경우 모두 IO의 완료는 인터럽트로 알려줌

DMA (Direct Memory Access)

💡 인터럽트가 너무 자주 걸리면 어떨까? 인터럽트도 결국 오버헤드의 일종이다.

메모리를 접근할 수 있는 장치는 CPU 뿐이며, 디스크 컨트롤러도 메모리에 직접 데이터를 전달할 수 없기에 인터럽트를 걸어서 CPU가 직접 로컬 버퍼에 있는 내용을 자신의 메모리로 카피해서 가져가는 과정을 무조건 거쳐야만 한다.

그렇지만 얘기한대로 인터럽트가 너무 잦게 되면 CPU가 비효율적이게 된다. 따라서 이를 해결하기 위해 CPU 말고도 메모리에 접근할 수 있는 장치를 하나 더 둔 것인데 그것이 바로 DMA이다.

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 중재 없이 디바이스컨트롤러가 로컬 버퍼에 있는 내용을 메모리에 block 단위로 직접 전송
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴
    • ex. 512mb 정도의 용량이 찼을 때(일괄배치 방식인가?) DMA가 직접 메모리에 카피하는 작업을 해주고, 작업 이후에 인터럽트를 걸어줌.

서로 다른 입출력 기계어

  • 좌측과 같이 메모리 접근 기계어 IO 접근 기계어 따로 있는 형태도 있고,
  • 우측처럼 메모리 접근 기계어로 IO도 접근할 수 있음. 메모리 주소를 메모리만 매기는 것이 아니라 IO장치에도 메모리의 주소를 연장해서 매겨놓고 실제 IO를 고유 기계어를 쓰는 것이 아니라 메모리 주소를 사용 (memory mapped IO)

저장장치 계층 구조

profile
둔한 붓이 총명함을 이긴다

0개의 댓글