[OS] 공룡책_ch.1~2 운영체제 개념 및 구조

bin1225·2024년 8월 11일
0

OS

목록 보기
1/10
post-thumbnail

운영체제

운영체제 개념

컴퓨터는 CPU, 메모리, 입출력장치, 저장장치 등 하드웨어 장치를 이용하여 명령을 수행하는 기계이다.

여러 프로그램이 이러한 컴퓨터 자원을 공유하게 되는데, 자원은 한정적이기 때문에 경쟁이 발생한다.

이런 경쟁 상태를 조율하고 자원을 효율적으로 사용할 수 있게 관리해주는 소프트웨어가 운영체제이다.

이외에도 컴퓨터 자원을 사용할 수 있는 인터페이스를 제공해주고, 안정적으로 사용할 수 있도록 관리해준다.

운영체제 구조

운영체제 서비스

운영체제의 구조는 각 운영체제마다 다르지만, 공통적으로 제공하는 서비스는 존재한다.

  • 사용자 인터페이스
    사용자가 응용프로그램이나 운영체제가 제공하는 기능들을 사용할 수 있도록 인터페이스를 제공한다.

    • GUI(Grapic User Interface) : 화면에 보이는 마우스 포인터와 아이콘 등 그래픽으로 구현된 요소들을 이용한다.
    • CLI(Command Line Interface) : cmd, powershell 프로그램이 이에 해당한다. 시스템에 대해 깊게 알고 있는 경우 보다 빨리 원하는 작업에 접근할 수 있어 유리하다. 또 GUI의 경우 자주 사용하는 기능들만 제공할 수 있기 때문에 특정 작업은 CLI를 통해서만 수행할 수 있다.
  • 프로그램 수행
    실행하는 프로그램을 메모리에 적재하고 실행한다. 동시에 여러가지 프로그램을 실행하기 위해서는 더 복잡한 작업이 요구되는데, 이를 처리해주는 기능을 한다.

  • 입출력 연산
    실행 중인 프로그램이 입출력 장치의 사용을 요구할 때 이를 통제한다.

  • 파일 시스템 조작
    파일을 생성하고 삭제하거나 수정하는 기능을 제공한다. 파일에 대한 권한을 설정할 수도 있다.

  • 통신
    프로세스간의 정보 교환 기능을 제공한다. 같은 컴퓨터 내에서 수행되는 프로세스간 통신인 IPC (Inter Process Comunication)과 외부 컴퓨터에 존재하는 프로세스와 통신하는 네트워크 통신에 대한 기능을 제공한다.

  • 오류 탐지
    하드웨어 장치, 입출력 장치나 프로그램에 오류가 발생하는 경우 원인을 파악하고 조치를 취하거나 사용자에게 원인을 알려준다.

  • 자원 할당
    여러개의 프로세스가 동시에 실행될때, 각 프로세스는 하드웨어 자원을 사용하려고 한다. 이 때 여러 프로세스가 하나의 자원을 사용하는 경우가 발생하는데, 자원을 효율적으로 사용할 수 있게 할당해주는 작업을 운영체제가 수행한다.

  • 기록 작성(logging)

  • 보호, 보안

커널

커널은 운영체제의 핵심 소프트웨어이다. Application 관점에서는 시스템 콜의 집합, I/O장치 관점에서는 인터럽트 처리기의 집합이다.

또 컴퓨터를 실행할 때 커널을 메모리에 적재해야 하는데, 이런 부팅 작업(bootstrap) 기능도 커널에서 제공한다.

시스템 콜

응용 프로그램은 운영체제가 제공하는 시스템 콜을 통해 운영체제가 제공하는 서비스를 이용하기도 한다.

특정 작업을 수행하기 위해서 복잡하고 많은 시스템 콜이 필요한 경우가 있다. 이러한 시스템콜을 일일히 코드에 작성하는 것은 번거롭고 복잡하다. 때문에 보통 언어에서 제공하는 라이브러리 함수를 이용하여 시스템콜을 간접적으로 호출한다.

예를 들어, 프로그램에서 read() 함수를 호출하면 실제 함수 내에서는 작업에 필요한 시스템 콜을 호출한다.
그리고 시스템콜에 맞는 작업이 커널 내부에서 수행된다.

시스템 콜의 종류는 다음과 같다.

  • 프로세스 제어
  • 파일 조작
  • 장치 관리
  • 정보 유지
    • 날짜, 시간 및 프로세스나 장치의 속성을 관리한다.
  • 통신
  • 보호

입출력 시스템

I/O장치 입장에서 커널은 인터럽트 처리기의 집합이다. 커널은 장치 구동기에 접근하고, 장치 구동기(Device driver) 가 장치 제어기(Device controller)를 제어하여 장치를 제어한다.

총 세 종류의 인터페이스가 존재한다.

  1. 시스템 콜: 응용 프로그램 → 커널
  2. hw인터페이스: 커널 → 장치 제어기
  3. 커널 → device driver

입출력 시스템의 하드웨어 인터페이스는 장치 경영 방식에 따라 분류할 수 있다.

레지스터 접근 방식에 따른 분류

  • 격리형 (Isolated I/O)
    • 메모리와는 별도의 주소 공간을 사용한다.
    • 특수한 입출력 명령어를 사용하여 접근한다.
    • 장점 : 기존 메모리 주소 공간에 영향 X
  • 메모리 사상형(Memory mapped I/O)
    • 메모리의 논리적 주소 공간에 제어기의 레지스터를 사상한다.
    • 기존의 메모리 접근을 위한 명령어 사용
    • 장점 : 일관성 및 이식성
  • 자료 이동 방식에 따른 분류
    • 직접 입출력 : CPU가 직접 메모리와 제어기 레지스터 사이의 데이터 이동 관리
    • DMA (Direct Memory Access) : CPU 도움 없이 메모리에 직접 접근하여 입출력
  • 제어 방법에 의한 분류
    • 폴링 방식 : 처리가 완료될 때까지 대기
    • 인터럽트 방식

인터럽트 마스크

인터럽트 발생 시 기존 수행되던 ISR(Interrupt Service Routin)이 있으면, 우선순위를 판단하여 실행될 인터럽트 서비스 루틴을 결정한다.

이 과정에서 인터럽트 마스크를 활용한다.

마스크에는 자신보다 높은 인터럽트를 1로 표시

AND연산 후 true가 나오면 새로 들어온 인터럽트를 처리한다.

I/O 장치 제어 전체 흐름

  1. 시스템 콜을 통해 커널 함수를 호출한다. (read)
  2. 커널에서 디바이스 드라이버와 HW인터페이스를 이용하여 장치 제어기에 명령을 적제한다.
  3. I/O가 완료될 때까지 대기 , 스케줄링 발생
  4. DMA를 통해 읽을 데이터를 메모리에서 가져온다.
  5. 처리 후 Interrupt 발생 시킴
  6. ISR 실행
  7. 대기 중이던 프로세스 wake up
  8. 커널 버퍼 내용을 유저 버퍼에 복사
  9. system call return

응용 프로그램이 운영체제마다 다른 이유
각 운영체제는 서로 다른 시스템콜을 제공한다. 기본적인 매커니즘이 비슷하다 하더라도 다른 부분들이 분명히 존재하고, 이러한 차이때문에 하나의 응용프로그램이 서로 다른 운영체제에서 작동하기 어렵다.

다중 프로그래밍과 다중 태스킹

프로그램을 실행하는 하나의 흐름을 프로세스라고 한다.
동시에 여러 프로그램을 실행할 수 있도록 운영체제는 여러 프로세스를 동시에 메모리에 유지한다.

각 프로세스는 프로세스 생명주기에 따라 실행, 대기, 준비, 종료 상태를 거친다.

다중 태스킹은 다중 프로그래밍의 논리적 확장으로, 여러 프로세스를 전환하며 CPU를 효율적으로 사용하고 사용자가 동시에 여러 프로그램을 사용할 수 있도록 하는 것이다.

이를 위해 CPU스케줄링을 한다.

이중모드

여러 프로세스가 자원을 공유하는 상황에서 한 프로세스가 다른 프로세스의 실행에 영향을 주거나, 오류를 야기할 수 있다.

예를 들어, 한 프로세스가 다른 프로세스가 참조하는 메모리 주소에 접근하여 데이터를 조작하면 정상적으로 동작할 수 없다.

이러한 문제를 방지하고자운영체제는 이중모드를 지원한다.

이중-모드와 다중 모드 운용

운영체제는 사용자 프로그램의 잘못된 작동이 다른 프로그램에 영향을 미치는 것을 막아야한다. 따라서 시스템 자체에 접근하는 것은 시스템 콜을 통해서만 가능하도록 하여 이를 보장한다.

운영체제는 사용자 모드커널 모드를 구성한다. 사용자 모드에서 시스템 콜을 호출하여 커널모드로 접속한 후 해당 기능을 실행한다. 이 과정에서 잘못된 접근을 방지할 수 있다.

0개의 댓글