컴퓨터 시스템의 구조

Single Ko·2023년 4월 24일
0

operating system

목록 보기
2/13

컴퓨터 시스템

컴퓨터의 구성 부품

  1. CPU (Central Processing Unit, 중앙처리장치)

    • 산술논리연산장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치.

    • 입력 받은 명령을 해석/연산 한 후, 결과 값을 출력 장치로 전달한다. 스스로 작업을 수행하는 것이 아니라 매뉴얼에 따라 CPU 내부의 program counter 레지스터가 가리키고 있는 메모리 주소에 위치한 instruction을 실행한다.

    • CPU에 대한 통제 역시 운영체제의 역할이다.

      1-1 제어장치(CU, Control Unit) : 프로세스 조작을 지시하는 CPU의 한 부품. 입출력 장치 간 통신을 제어하고 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정한다.

      1-2 산술논리연산장치(ALU, Arithmetic Logic Unit)은 덧셈,뺄셈 같은 두 숫자의 산술 연산과 베타적 논리합, 논리곱 같은 연산을 계산하는 디지털 회로.

      1-3 레지스터(Register) : CPU 안에 있는 매우 빠른 임시기억장치. CPU와 직접 연결되어있어 연산 속도가 메모리보다 빠르다. CPU는 자체적으로 데이터를 저장할 방법이 없기 때문에 레지스터를 거쳐 데이터를 전달.

    CPU 연산 처리

    1 제어장치가 메모리에 계산할 값을 로드한다. 또한 레지스터에도 로드한다.
    2 제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령한다.
    3 제어장치가 계산된 값을 다시 레지스터에서 메모리로 저장한다.

  2. Memory (RAM 또는 Random Access Memory, 주기억장치) ─ CPU가 처리할 데이터나 명령어가 임시로 저장되는 곳으로 CPU의 작업공간 역할을 한다. CPU는 매 클럭 사이클마다 메모리로부터 기계어로 작성된 instruction을 읽어서 실행한다. 컴퓨터 작업을 할 때 디스크에 있는 데이터는 먼저 메모리로 이동된 다음 CPU로 전송된다. 프로그램의 실행도 이와 마찬가지로, CPU가 메모리에 저장되어 있는 용량만큼 프로그램을 작동시킨다.

  3. Disk (HDD 또는 SSD등... , 보조기억장치) ─ 보통 보조기억장치라고 하지만 I/O device라고도 할 수 있다. 디스크 정보를 메모리로 읽어들이는 input device로서의 역할과, CPU의 처리 결과를 디스크의 파일 시스템에 저장하는 output device로서의 역할을 동시에 수행한다.

Mode Bit

사용자가 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치 필요

Mode Bit을 통해 소프트웨어 제어 메커니즘에 따라 두 가지 모드의 지원

  • 1: 사용자 모드 ─ CPU 제어권이 사용자 프로그램에 있음

  • 0: 커널 모드 ─ CPU 제어권이 운영체제에 있음

  • 커널 모드일 때는 메모리 뿐만 아니라 하드웨어(I/O장치) 대한 접근이 가능하지만 사용자 모드일 때는 자원에 대한 제한적인 접근만이 가능하다.

  • 보안을 해칠 수 있는 중요한 명령어는 커널 모드에서만 수행 가능한 특권명령으로 규정

  • interrupt나 exception 발생 시 하드웨어가 mode bit을 0으로 바꿈. 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅

    • Exception : CPU가 권한이 없는 기계어를 실행시키려할때, exception이 발생하고 권한이 운영체제로 넘어간다. 또는 프로그램 오류.

    유저 모드 : 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못함
    커널 모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드
    커널 : 운영체제의 핵심 부분. 시스템콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일시스템, I/O디바이스, I/O요청관리 등 운영체제의 중추적인 역할을 한다.

Interrupt line(IRQ 또는 Interrupt Request Lines)

CPU는 항상 메모리에 있는 instruction을 실행시키는데, 키보드나 디스크와 같이 I/O Device에서 인터럽트가 들어왔을 때, 이를 인터럽트 라인에 세팅하고 CPU에게 알려 처리하도록 함. CPU는 수시로 Interrupt line을 통해 인터럽트 발생 여부를 확인한다. 즉 Interrupt line은 interrupt가 들어와서 대기하는 곳.

Interrupt

현대의 운영체제는 인터럽트에 의해 구동됨.

✨ 인터럽트란?

  • 어떤 신호가 들어왔을때 CPU를 잠시 정시키는것.
    ex) CPU가 프로세스를 작동하다 I/O 디바이스를 써야될 일이 생김. 그래서 디스크한테 자료를 내놔 했는데, 이 디스크는 CPU에 비해 너무 느림. 그동안 CPU는 놀고 있을 수 없으니까 다른 일을 하로 가고, 디스크가 일을 다했으면 CPU에 알려주는 메시지. 그 후 CPU는 이전의 다 못처리한 일을 하러 감.

  • CPU는 어떻게 이전에 하던 작업을 기억하고 있을까?
    ✓ 인터럽트 당한 시점의 레지스터와 program counter를 저장한 후 CPU의 제어를 인터럽트 핸들러에 넘긴다.

✨ 인터럽트 종류

  • Interrupt(하드웨어 인터럽트): 하드웨어가 발생시킨 인터럽트, 일반적인 인터럽트
    ex) I/O 장치들, Timer
  • Trap(소프트웨어 입터럽트) 넓은의미에서 인터럽트긴 하지만 따로 트랩이라고 부름.
    ✓ Exception: 프로그램이 오류를 범한 경우나 권한이 없는 명령어를 실행하려 할때
    ✓ System call: 프로그램이 커널 함수를 호출한 경우 (사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출함)

✨ 인터럽트 관련 용어

  • 인터럽트 벡터
    ✓ 해당 인터럽트의 처리 루틴 주소를 가지고 있음
  • 인터럽트 처리 루틴(Interrupt Service Routine, 인터럽트 핸들러)
    ✓ 해당 인터럽트를 처리하는 커널 함수. 해당 인터럽트가 무슨 일을 해야하는지 적혀있는 것

🏴 인터럽트의 종류가 여러개 있고, 각각 해야할 일이 다르기 때문에 각 인터럽트가 처리해야할 일을 인터럽트 처리 루틴에 담아둠

🏴 어디에 있는 함수들을 실행해야 하는지? → 인터럽트 벡터에 명시해둠

Registers

✨ 메모리보다 더 빠르면서 CPU가 기계어 연산에 필요한 Input, Output을 저장하는 CPU 내부의 공간.

✨ PC(Program Counter) register - 실행할 기계어의 주소를 가지고 있는 레지스터. 메모리를 가르키고 있다고 봐도 됨. CPU는 pc register를 읽고 메모리 위치로 간다.

Timer

✨ 프로그램의 CPU의 독점을 막기위해 사용되는 장치. 프로그램이 CPU를 차지하고 있을때 운영체제 단독으로는 이를 가져 올 수 없기 때문에 이런걸 방지하기 위한 부가적인 하드웨어.

  • 특정 프로그램이 CPU를 독점하는 것으로부터 보호
  • 프로그램이 정해진 시간이 흐른 뒤에도 계속 CPU를 차지하고 있으면 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
  • 타이머는 매 클럭 틱 때마다 1씩 감소
  • 타이머 값이 0이 되면 타이머 인터럽트 발생
  • time sharing을 구현하기 위해 널리 사용됨
  • 현재 시간을 계산하기 위해서도 사용

Device Controller

모든 입출력 명령은 ‘특권 명령’이다.

특권 명령: 하드웨어의 동작, 시스템의 통합 환경 변경 등 개별 유저가 실행해선 안되는 명령. 사용자 모드에서는 실행 불가

💡 시스템 콜 : 사용자 프로그램은 직접적으로 I/O device에 접근할 수 없기 때문에(입출력 명령은 특권명령) 운영 체제에게 I/O를 요청하는 것을 시스템 콜이라고 한다.

보안을 포함한 여러 이유로 인해 only 운영체제만이 I/O device에 접근 가능하다.

때문에 프로그램 실행중에 키보드 입력값을 받거나 화면을 출력하는 등의 I/O 작업을 해야 할 경우 스스로 CPU를 운영체제에게 넘겨주고(Trap) 운영체제는 CPU를 받아서 I/O 요청이 올바른 요청인지 확인한 후 해당 요청을 Device controller에 전달한다.

  • 정리 : 응용 프로그램이 직접 리소스를 사용할 수 없는 부분에 대해(커널의 조작이 필요한 부분) 커널에게 제어권을 넘기기 위한 인터페이스이다.

✨ 사용자 프로그램이 I/O를 하는 과정 간략히 정리

  1. I/O가 필요할 시 시스템콜(system call)
  2. CPU의 제어권이 운영체제에게 넘어 간다.(trap)
  3. 운영체제는 올바른 I/O 요청인지 확인 후 I/O 수행
  4. I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김

✨ I/O device controller

  • 해당 I/O 장치유형을 관리하는 일종의 작은 CPU
  • 제어 정보를 위해 control register, status register를 가짐
  • local buffer를 가짐(일종의 data register)
  • I/O는 실제 device와 local buffer 사이에서 일어나고, Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림

device driver(장치 구동기): 컴퓨터 내부에서 CPU가 진행하는 코드. 각 장치별 처리루틴 → software

device controller(장치 제어기): 각 장치를 통제하는 일종의 작은 cpu, 이 디바이스 컨트롤러에는 펌웨어가 들어 가있고 그걸로 작동을 한다. → hardware

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

동기식 입출력(synchronous I/O)

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감

  • 보통의 경우는 동기식 입출력을 사용한다.

  • Interrupt가 없다면? 방법 1

    • I/O가 끝날 때까지 CPU를 낭비시킴
    • CPU뿐만 아니라 I/O 장치도 낭비시킴
    • 매시점 하나의 I/O만 일어날 수 있음
  • Interrupt가 있을때. 방법 2

    • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음(CPU는 I/O가 끝날 때까지 기다리지 않고 다른 프로그램에 CPU 제어권을 준다는 말)
    • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
    • 다른 프로그램에게 CPU를 줌

비동기식 입출력(asynchronous I/O)

  • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

  • 결과를 확인하기 전에 수행할 수 있는 작업이 있는 경우 비동기식 입출력을 사용한다.

    (보통은 읽기 작업은 동기식, 쓰기 작업은 비동기식이 가능하기도 하다)

차이점
device controller가 I/O 작업이 끝나기를 requesting process가 기다리는 것과 기다리지 않는 차이

공통점
두 경우 모두 I/O 완료는 인터럽트를 통해 알려줌

DMA(Direct Memory Access)

  • 일반적으로 I/O 디바이스들이 메인 메모리에 바로 접근할 수 없고 I/O 디바이스들은 인터럽트를 발생시켜 CPU가 I/O 디바이스들의 데이터를 읽어 메인 메모리 프로그램에 올린다.

  • 하지만 CPU는 프로그램의 명령어를 처리하는 것 외에도 항상 각각의 I/O 디바이스들 인터럽트에 대한 처리도 해야 하기 때문에 기존 CPU 작업들을 방해하게 된다.

  • 이러한 비효율성을 극복하기 위해 CPU 대신에 I/O 디바이스들에 인터럽트를 처리할 컨트롤러를 하나 더 둔다. 이것이 바로 DMA 장치이다.

  • DMA가 있음으로 더 이상 CPU는 하던 작업을 멈추고 각종 I/O디바이스들의 인터럽트를 처리할 필요가 없어진다. 단지 CPU는 제어신호만 주고받으면 된다.

  • 이때 DMA는 바이트 단위가 아니라 블록 단위로 데이터를 모아서 CPU에게 인터럽트를 발생시킨다. 이러한 방법으로 CPU의 효율을 높일 수 있다.

    • CPU의 비효율성을 없에고 빠르게 I/O장치를 처리하기 위한 것
    • CPU의 중재 없이 device controller가 device의 local buffer storage의 내용을 메모리에 block 단위로 직접 전송
    • 바이트 단위가 아니라 block 단위로 인터셉트를 발생시킴

저장장치 계층 구조

위로 갈수록 빠르고, 비싸다.(용량이 작음)

캐싱의 원리 : 필요할때 항상 원본 저장장치(HDD)까지 가서 읽어오면 느리다. 그 위의 장치들이 가지고 있다면 밑에까지 내려가지 않고 읽어 올수 있는 것.
=> 다만 위쪽으로 올라갈수록 용량이 작으므로 다 가지고 있을 수 없다.

캐싱을 잘하려면 재사용성이 높은것을 보관하고, 사용성이 낮은것을 쫒아내는 것이 필요하다.

Main memory 부분 (Executable) -> 직접 실행이 가능

Secondary 부분 -> I/O를 해야 하는 장치. I/O 컨트롤러를 통해..

Primary부분은 휘발성. 전원이 끄지면 데이터가 다 날아간다. Secondary부분은 비휘발성 기억장치. 데이터가 날아가지 않는다.

profile
공부 정리 블로그

0개의 댓글