[운영체제 2주차] - 컴퓨터 시스템의 구조

Oridev·2022년 2월 14일
0

OS

목록 보기
2/11

반효경 교수님의 운영체제 강의와 Operating System Concepts 를 참고하였습니다.

운영체제의 분류

협의의 운영체제 vs 광의의 운영체제

  • 운영체제를 말할 때 좁게는 메모리에 상주하는 커널 부분을 , 넓게는 편의 기능을 제공하기 위한 시스템 유틸리티를 포함한다.
    • 복사-붙여넣기 기능을 수행하는 기능은 운영체제에서 제공하는 기능 중 하나이다. 그러나 이런 프로그램은 메모리에 상주하지 않고 필요할 때 운영체제가 메모리에 올려서 사용하는 기능이다.

운영 체제의 분류

  • 동시 작업 가능 여부
    • 단일 작업 : 한 번에 하나의 작업만 처리한다.
      • 프롬프트 상에서 한 명령의 수행을 끝내기 전에 다른 명령을 수행할 수 없다.
    • 다중 작업
      • 현대 운영체제에서는 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행할 수 있음.
      • 다중 작업이 되면서 형평성, 효율성 등의 여러 이슈가 등장한다.
  • 사용자의 수
    • 단일 사용자 : MS-DOS, MS Windows
    • 다중 사용자 : UNIX 등 서버용 OS
      • 보안 문제나 권한 문제, 동기화 문제 등이 등장한다.
  • 처리 방식
    • 일괄 처리(batch processing)
      • 작업 요청의 일정량을 모아서 한꺼번에 처리한다.
      • 초기의 펀치 카드 처리 시스템
    • 시분할 (time sharing)
      • 다중 작업을 할 때, 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용한다.
        • 사용자로 하여금 동시에 작업이 처리되는 듯한 착각을 준다.
      • 매우 반응성이 좋다.
    • 실시간(Realtime OS)
      • 정해진 시간 안에 어떠한 일이 반드시 완료되어야 하는 작업을 위한 OS
        • 엄격하게 deadline이 정해진 Hard realtime system
        • 어느 정도 타협이 가능한 Soft realtime system

몇 가지 용어

  • Multitasking : 동시에 여러 작업을 수행하는 형태

  • Multiprogramming : 메모리를 강조한 표현으로, 메모리 상에 여러 프로그램이 올라가있다.

  • Time Sharing : CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조

  • Multiprocess : Multiprogramming과 유사한 의미이다.

  • Multiprocessor : 한 컴퓨터에 여러 개의 CPU가 들어있는 것을 의미한다.

    • 병렬적으로 실행이 가능해지지만 이에 수반되는 여러 문제가 있다.

운영체제의 예

  • UNIX

    • 서버용 운영체제
    • 코드의 대부분을 C언어로 작성
      • 원래는 어셈블리 언어로 하드웨어를 조작했지만 C언어를 만들어 처리하였다.
    • 높은 이식성을 가짐
      • C언어는 여러 하드웨어 아키텍처에서 호환이 가능하기 때문이다.
    • 최소한의 커널 구조
    • 소스 코드 공개
    • 복잡한 시스템에 맞게 확장이 용이하다.
  • DOS

    • 단일 사용자용 운영체제
  • MS Windows

    • MS사의 다중 작업용 GUI 기반 운영 체제
    • 불안정성
    • Plug and Play, 네트워크 환경 강화
    • 풍부한 지원 소프트 웨어

컴퓨터 시스템 구조

컴퓨터 내부와 컴퓨터 외부

  • 엄밀히 말하면 (CPU, 메모리) 로 구성된 컴퓨터와 외부 장치인 I/O device로 구성된다.

(출처 : https://zangzangs.tistory.com/105)

1) CPU: 주어진 명령어를 수행하는 하드웨어

2) 메모리: CPU가 명령어를 수행하기 위해 필요한 작업공간

3) I/O device Controller, local buffer

3-1) I/O device Controller: CPU가 직접 I/O 장치에서 데이터를 가져올 수 없기 때문에 I/O를 해달라고 부탁하는 장치, 해당 I/O 장치를 관리하는 일종의 CPU

3-2) Local buffer: 요청한 내용을 임시적으로 저장하는 공간, Register와 유사하다고 볼 수 있다.

  • device driver: OS 상의 각 I/O 장치 별 처리 루틴(software), CPU가 I/O controller에 부탁하는 명령어
  • Firmware : device 내에서 동작하는 코드들

4) Interrupt line: I/O 장치나 시스템 콜에 의해 운영체제에게 요구해야 하는 작업이 있을 때 요청하는 인터럽트 요청을 하는 하드웨어

  • Interrupt system : 적절한 신호가 들어오면 CPU 실행을 잠깐 중단시킬 수 있는 핀(칩에 연결된 전기적 접점을 뜻한다) 이나 전기 연결을 포함한다.

5) Mode bit: CPU가 명령어를 수행할 때, 사용자 프로그램을 수행하는지, 운영체제 상의 명령을 수행하는지

를 구분하여 악의적인 명령을 막기 위해 CPU가 어떤 주체가 실행하고 있는지를 알려주는 하드웨어

  • 운영체제는 이 작업을 도와줄 수 없다. 어쨌든 운영체제도 메모리 상에서 돌아가고 있는 프로그램이기 때문에 현재 CPU를 가지고 실행중이지 않으면 자신의 명령을 수행할 수 없기 때문이다. 그래서 운영체제는 mode bit이라는 하드웨어의 도움을 받아 이 작업을 수행한다.
  • 자신이 제어권을 받을 때에는 mode bit을 0으로 설정하고, CPU 스케줄링을 통해 사용자 프로그램에 제어권을 넘겨줄 때, mode bit을 1로 세팅해서 넘긴다. 그러면 CPU는 이 명령어가 사용자 프로그램의 명령어라는 것을 인식하게 된다.
  • 보안을 해칠 수 있는 중요 명령들은 특권 명령으로 분류한다. CPU는 특권 명령이 실행되었는데 mode bit이 1이라면 자동으로 운영체제에게 제어권이 넘어간다. Interrupt나 Exception이 발생하면 mode bit이 0으로 바뀐다.

6) Timer: 프로세스로부터 일정한 시간이 지나면 제어권을 뺏어오는 역할을 해주는 하드웨어 장치

  • Mode bit과 마찬가지로 운영체제는 동등한 프로세스이므로 제어권을 뺏어오는 작업은 할 수 없기 때문에 하드웨어의 도움을 받는다.
  • 일정 시간 간격으로 timer interrupt를 발생시켜 프로세스가 일정 시간 이상 실행되는 것을 방지한다.
    • 클럭과 디지털회로를 사용하므로 정확한 시간을 얻을 수 있다.
  • 타이머 내용을 수정하는 명령 또한 특권 명령이며, 운영체제가 프로세스에게 cpu를 넘겨주기 전에 타이머를 설정한다.

7) DMA (Direct Memory Access) Controller: I/O 작업이 완료되었을 때마다 바이트 단위로 인터럽트가 발생하게 되는데, 이 과정에서 CPU의 낭비가 심하게 된다. 그래서 직접 메모리에 접근할 수 있는 DMA Controller를 두어 I/O 장치의 결과를 블록 단위로 메모리에 올리는 작업을 대신하고 완료되면 인터럽트로 CPU에게 알려준다.

8) Register: 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소이다. 일반적으로 현재 계산중인 값을 저장하는 데 사용된다. 대부분의 프로세서에서는 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리한 후 다시 그 내용을 레지스터에서 메인 메모리로 저장하는 로드-스토어방식을 따른다.

  • PC(Program counter): CPU가 다음번에 실행할 메모리의 주소를 가지고 있다.

  • IR(Instruction register): 현재 수행중인 명령어를 가지고 있다.

  • MAR(Memory address register): 메모리로부터 읽어오거나 메모리에 쓰기 위한 주소를 가지고 있다.

  • MBR(Memory buffer register): 메모리로부터 읽어온 데이터 또는 메모리에 써야할 데이터를 가지고 있다.

  • I/O AR(Input/Output address register): 입출력 장치에 따른 입출력 모듈의 주소를 가지고 있다.

  • I/O BR(Input/Output buffer register): 입출력 모듈과 프로세서 간의 데이터 교환을 위해 사용된다.

  • 레지스터의 종류, 타이머의 동작방식 등등 알아보기

시스템 콜 (System call)

사용자 프로그램이 운영체제의 서비스(I/O 장치 접근 등)를 받기 위해 커널 함수를 호출하는 것

인터럽트 (Interrupt)

인터럽트

  • 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다

Interrupt (넓은 의미)

  • Interrupt (하드웨어 인터럽트): 하드웨어가 발생시키는 인터럽트
  • Trap (소프트웨어 인터럽트)
    • Exception: 프로그램이 오류를 범한 경우
    • System call: 프로그램이 커널을 호출한 경우

인터럽트 관련 용어

  • 인터럽트 벡터
    • 특정 인터럽트 발생 시 어떤 명령어를 수행할 지 가리키고 있는 주소
  • 인터럽트 처리 루틴
    • 인터럽트에 대한 처리 코드 자체를 말한다.

CPU가 운영체제로 다시 넘어오는 경우

  • 사용자 프로그램이 필요에 의해 시스템 콜을 한 경우
  • 사용자 프로그램이 Exception을 일으키는 경우
  • 하드웨어가 자신의 작업의 완료 등의 이유로 인터럽트를 일으키는 경우
  • 계속 CPU를 사용하고 싶은데 Timer에 의해 뺏기는 경우

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

  • 동기식과 비동기식이란?

    • Synchronous : 여럿이 무엇을 할 때 시간이 잘 맞아떨어지는 형태
      • Synchronized swimming : 모두가 시간에 맞춰 동일한 동작을 한다
  • 동기식 입출력

    • 어떤 프로세스가 진행하다가 I/O 요청이 들어오면 결과가 나올 때까지 기다리는 입출력 방식
    • 구현 방법 1
      • 단순하게 I/O가 끝날 때까지 기다린다.
      • I/O가 완료될 때까지 다른 프로그램이 실행중일 수 없으므로 매 시점 하나의 I/O만 일어난다.
      • 매우 비효율적이다.
    • 구현 방법 2
      • I/O 요청을 하면 완료될 때까지 CPU를 빼앗는다.
      • I/O 처리를 기다리는 줄에 해당 프로그램이 줄을 서고, 다른 프로그램이 CPU를 잡아 실행된다.
      • 동시에 여러 프로그램이 I/O 처리를 기다릴 수 있고 그 동안 CPU도 낭비되지 않는다.
  • 비동기식 입출력

    • 어떤 프로세스가 I/O 요청 중에도 일단 제어권이 넘어가고 작업을 수행하는 방식
    • 특히 쓰는 작업은 결과를 몰라도 진행할 수 있기 때문에 가능하다.

서로 다른 입출력 명령어

  • 일반적으로 I/O 를 수행하는 special instruction에 의한 입출력
  • 메모리 접근 명령어를 통해서 접근하는 Memory mapped I/O
profile
천천히, 하지만 꾸준히 그리고 열심히

2개의 댓글

comment-user-thumbnail
2022년 2월 15일

OS 공부 꾸준히 하고 계시군요 응원합니다 suntory 💪

1개의 답글