[운영체제와 정보기술의 원리] 3. 컴퓨터 시스템의 동작 원리

진예·2023년 12월 8일
0

Operating System

목록 보기
2/8
post-thumbnail

💡 컴퓨터 시스템

  • 내부장치 : CPU, 메모리
  • 외부장치 : 키보드, 마우스, 모니터, 디스크, ... (= 입출력 장치)

💡 입출력 (I/O)

컴퓨터 시스템외부의 입출력 장치들데이터를 주고받는 것


📒 CPU와 I/O 연산

메인 CPU는 기본적으로 메모리에 올라온 명령(instruction)을 하나씩 읽어오면서 처리하다가, 입출력 장치의 컨트롤러에서 CPU에 인터럽트를 발생시켜 인터럽트 라인에 신호가 들어오면 CPU는 처리하던 명령을 중단한 후 인터럽트를 처리한다. 이 때 CPU는 명령 하나를 수행할 때마다 인터럽트가 발생했는지 확인한다.

✔️ 로컬버퍼 (local buffer)

각 장치로부터 오고 가는 데이터를 임시로 저장하기 위한 작은 메모리

: 입출력 장치에서 데이터를 읽어오는 경우, 장치의 컨트롤러데이터를 전달하여 로컬버퍼에 데이터를 저장할 수 있다.

✔️ DMA (Direct Memory Access)

CPU 이외에 메모리 접근이 가능한 장치

: 일반적으로 인터럽트가 발생하면 CPU로컬버퍼에서 메모리로 데이터를 읽어오는데, 인터럽트가 너무 자주 발생하면 CPU의 효율성이 떨어지게 된다. DMA가 해당 역할을 대신 수행하여 CPU에게 알려주면 CPU가 더욱 효율적으로 작업을 처리할 수 있다.

✔️ 타이머 (timer)

프로그램이 CPU를 점유하고 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU의 제어권을 가질 수 있게 함

: 특정 프로그램이 무한반복 등을 통해 CPU를 독점하는 경우, 다른 프로그램 및 운영체제에서 CPU를 사용할 수 없으므로 타이머를 통해 제어권을 뺏어 CPU를 효율적으로 사용할 수 있다.


📒 인터럽트 (Interrupt)

외부 장치에서 CPU의 서비스가 필요할 때 요청하기 위해 보내는 신호

  • 인터럽트 처리루틴 (interrupt service routine) : 다양한 인터럽트에 대해 각각 처리해야 할 업무들을 정의한 것

  • 인터럽트 벡터 (inteerupt vector) : 인터럽트 종류마다 번호를 부여해서 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키는 자료구조


📝 소프트웨어 인터럽트 = 트랩(trap)

✔️ 예외 상황 (Exception)

사용자가 비정상적인 작업을 시도하거나, 권한이 없는 작업을 시도할 때 이에 대한 처리를 위해 발생시키는 인터럽트

ex) 0으로 나누는 연산, 메모리 영역 바깥에 접근, ...

✔️ 시스템 콜 (System Call)

사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스를 요청하는 방법

ex) 입출력 명령


📝 인터럽트 핸들링

인터럽트가 발생한 경우, 처리해야 할 일의 절차

ex) 프로그램 A 처리 중 인터럽트 발생

  1. 프로그램 A의 현재 상태프로세스 제어블록(PCB)에 저장

    PCB : 현재 시스템 내에서 실행되는 프로그램들의 메모리 주소, 레지스터 값 등의 상태를 저장할 수 있는 자료구조

  2. 인터럽트 처리

  3. 인터럽트 처리가 끝나면 PCB로부터 저장된 상태를 불러와 프로그램 A 처리


📒 입출력 구조

📝 동기식 입출력

입출력 요청을 했을 때, 입출력 작업이 완료되어야만 프로그램이 후속 작업을 수행할 수 있는 방식

동기식 입출력의 경우, 프로그램이 입출력을 요청하면 입출력 처리가 끝날 때까지 아무런 작업도 수행하지 못하게 되어 자원이 낭비된다.

이를 방지하기 위해 한 프로프램이 입출력 처리를 기다리고 있는 상태라면, 비어있는 CPU메모리 상의 다른 프로그램을 처리할 수 있다. 이 때 입출력 중인 프로그램봉쇄 상태로 전환시켜 해당 프로그램에게는 CPU를 할당할 수 없는 상태로 만든다.

이런 방식으로 CPU를 할당하다 보면 다수의 입출력 요청이 발생할 수 있다. 이 때 각 입출력 장치는 를 두어 요청이 들어온 순서대로 작업을 처리할 수 있다.

입출력 처리를 마치면 해당 장치에서 인터럽트를 보내 봉쇄 상태를 해제시켜 CPU가 후속 작업을 수행할 수 있다.


📝 비동기식 입출력

CPU의 제어권을 입출력 연산을 호출한 프로그램에게 부여하는 방식

비동기식 입출력은 입출력 요청의 결과를 기다리지 않고, 결과값과 상관없이 처리할 수 있는 작업을 먼저 수행한 후, 결과값이 넘어오면 나머지 작업을 수행한다.


💡 저장장치

주기억장치 (휘발성) + 보조기억장치 (비휘발성)

✔️ 보조기억 장치

  • 파일 시스템 : 전원이 나가도 유지해야 할 정보를 저장 = 비휘발성
  • 스왑 영역 : 프로그램 수행에 당장 필요하지 않은 부분을 내려놓는 곳 = 메모리 연장

📝 계층 구조

빠른 저장장치 (속도 ↑, 용량 ↓) ➡️ 느린 저장장치 (속도 ↓, 용량 ↑)

  • 빠른 저장장치 : 레지스터, 캐시 메모리, 메인 메모리, ... (휘발성)
  • 느린 저장장치 : 마그네틱 디스크, 광디스크, ... (비휘발성)

캐싱 기법 : 상대적으로 느린 저장장치에 저장된 데이터 중 자주 사용되는 데이터를 선별하여 빠른 저장장치에 저장함으로써 성능을 향상시키는 방법


💡 보안

📒 하드웨어 보안

다중 프로그래밍 환경에서는 각 프로그램이 다른 프로그램의 실행을 방해하거나, 프로그램 간 충돌을 일으킬 수 있으므로 보안에 신경써야 한다.

  • 커널 모드 : 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행 ➡️ 모든 명령 실행 가능

  • 사용자 모드 : 일반 사용자 프로그램 실행 ➡️ 제한적 명령 실행

시스템에 중요한 영향을 미치는 연산커널 모드에서만 실행 가능하게 함으로써 하드웨어의 보안을 유지할 수 있다.

사용자 프로그램에서 보안 관련 명령(특권명령)을 수행하는 것을 막기 위해, CPU 내부에 모드비트를 두어 사용자 프로그램을 감시한다. 모드비트가 0이면 커널 모드, 1이면 사용자 모드라는 의미이다. 특권명령은 모드비트가 0인 경우에만 실행될 수 있다.

사용자 프로그램에서 입출력과 같은 특권명령을 수행해야 할 경우, 시스템 콜을 통해 인터럽트를 발생시켜 CPU의 제어권을 운영체제로 넘겨준다. 이 과정에서 모드비트1에서 0으로 바뀌어서 명령을 수행할 수 있다. 운영체제에서 명령을 모두 수행한 후 다시 사용자 모드로 전환되면 CPU 제어권이 사용자 프로그램으로 넘어가면서 모드비트는 1으로 바뀌게 된다.


📒 메모리 보안

메모리에는 여러 프로그램들이 동시에 올라가서 실행되기 때문에 메모리 영역 침범 등의 문제가 발생할 수 있다. 이를 방지하기 위해 2개의 레지스터를 사용하여 프로그램이 접근하려는 메모리의 부분합법적인지 체크할 수 있다.

  • 기준 레지스터 : 프로그램이 합법적으로 접근할 수 있는 메모리상의 가장 작은 주소

  • 한계 레지스터 : 기준 레지스터값으로부터 접근할 수 있는 메모리의 범위

즉, 사용자 프로그램은 기준 레지스터 + 한계 레지스터 범위의 사이 영역에만 접근할 수 있다.


[출처] : 반효경 교수님 - 운영체제 강의, 운영체제와 정보기술의 원리

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글