CS/운영체제

0530 - 컴퓨터 시스템의 구조

지나가는 마을사람 2023. 5. 30. 22:00

1. 컴퓨터 시스템의 구조

  • 내부장치
    • CPU
    • 메모리
  • 외부장치
    • 입출력(I/O) 장치
      • 키보드
      • 모니터
      • 프린트 …
  • CPU에도 레지스터라는 저장장치 존재함.
    • 다만, 용량이 매우 작아서, 필요한 정보는 메모리에서 저장하고 읽어온다.

 

2. CPU와 입출력

  • 컴퓨터 연산은 CPU가 처리한다.
  • 그러나, I/O 장치의 연산을 CPU가 처리하지는 않음, I/O 장치 각각의 컨트롤러가 처리한다.
  • 입출력 연산은 각각의 컨트롤러가 일단 처리하고, 이 것을 CPU에게 알려준다. (인터럽트)
  • CPU는 메모리에서 명령어를 읽어올 때마다 명령어를 실행하기 전에 인터럽트가 발생했는지 체크하고 발생했다면 인터럽트 부터 처리해준 후 명령어를 실행한다.

버퍼

  • 데이터 전달의 효울성 때문에 사용한다.
  • 기본적으로 입출력은 시간이 많이 걸리는 작업이다. CPU는 이걸 기다리는 동안 할 수 있는일이 엄청나게 많을 것임! 그만큼, 시간 낭비라고 볼 수 있음!
  • 그래서, 버퍼에 데이터에 일정량 차야 해당 작업들을 실행하는 것!

인터럽트

  • 바로 밑에서 설명함!

 

3. 인터럽트

  • CPU가 프로그램을 실행하고 있을 때, 예외상황이 발생하여 처리가 필요한 경우 CPU에게 알려서 처리할 수 있도록 하는 것.
  • 왜 인터럽트를 써야 할까?
    • CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때
      • I/O연산 처리, 어떤 프로그램이 CPU를 너무 오래 사용하고 있다거나, 오류 발생…..
  • 인터럽트의 종류 (어디에서 발생시키느냐가 초점임)
    • 하드웨어 인터럽트
      • 하드웨어(I/O 장치) 컨트롤러가 CPU의 서비스를 받기 위해 발생시킨 인터럽트
      • 외부 인터럽트
    • 소프트웨어 인터럽트
      • CPU 내부에서 발생한 인터럽트
      • 프로그램에서 예외 발생
        • 프로그램에 허용되지 않은 연산을 하려고 하면 발생( 0으로 나누기, 프로그램에 허용되지 않은 메모리 영역 참조 등등…)
      • 특별한 상황 발생 (시스템 콜 …)
        • 사용자 프로그램이 운영체제의 서비스를 요청할 때, 사용자 프로그램은 직접 특권 명령을 실행할 수 없으므로 운영체제의 커널 호출함!
  • 인터럽트 처리 과정

-   인터럽트 처리 루틴
    -   인터럽트 벡터
        -   여러가지 인터럽트에 대해 해당 인스턴스가 발생했을 때, 실행해야 할 **서비스 루틴의 주소 테이블**
    -   인터럽트 서비스 루틴 ( 인터럽트 핸들러 )
        -   실제 인터럽트를 처리하기 위한 절차( 기계어 코드 ), 운영체제마다 이미 프로그래밍 되어 있는 부분이다.
    -   예시로 설명
        -   불남 : 인터럽트 발생
        -   불남에 따른 대비 동작 (도망가! 불이야!) : 인터럽트 서비스 루틴
        -   불이난 상황을 저장한 주소 : 인터럽트 벡터 테이블