[운영체제] 운영체제 개요 & 시스템 구조

서지혜·2023년 6월 21일
1

TIL

목록 보기
10/22

🧭 CS Study - 운영체제

🚩 주제 : 운영체제 개요 시스템 구조와 프로그램 실행

🎥 강의 : KOCW 운영체제 강의 - 이화여자대학교 반효경 교수님

1차시 : 운영체제 개요

운영체제(Operation System)이란?

컴퓨터 하드웨어 위에 설치되어 소프트웨어와 하드웨어를 연결하는 소프트웨어이다. 좁은 의미의 운영체제를 커널(메모리에 상주하는 부분)이라고 한다. 넓은 의미의 운영체제는 커널과 주변 시스템 유틸리티(메모리에 상주하지 않는 별도의 프로그램)을 말한다. 보통의 경우 커널을 운영체제라고 한다.
컴퓨터 시스템을 편리하게 사용하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 것이 OS의 목적이다. 프로세서, 기억장치, I/O장치 등의 자원이 최대한의 성능을 내도록 형평성 있는 자원 분배를 주된 역할로 한다. 사용자 및 운영체제를 보호하고 프로세스, 파일, 메모리를 관리하는 것도 OS의 역할이다.

OS의 분류

작업 개수 기준
단일 작업(Single Tasking) : 한번에 하나의 작업만 처리 가능(MS-DOS)
다중 작업(Multi Tasking) : 동시에 두 개 이상의 작업 처리 가능(UNIX, MS Windows)

사용자 인원 기준
단일 사용자 : MS-DOS, MS Windows
다중 사용자 : UNIX, NT Server

처리 방식 기준
일괄 처리(batch processing)

  • 작업 요청을 일정량 모아서 한꺼번에 처리한다.
  • 오래된 방식이고 interactive하지 않다.

시분할 처리(time sharing)

  • 여러 작업을 일정한 시간 단위로 분할하여 사용한다.(지금의 컴퓨터)
  • interactive한 방식이며 짧은 응답 시간을 가진다.

실시간 처리(Realtime OS)

  • 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 함

OS와 관련된 몇가지 용어

Multitasking
: 하나의 프로그램이 끝나기 전에 다른 프로그램이 실행 가능한 것

Multiprogramming
: 메모리에 여러 프로그램이 동시에 올라가는 것

Time sharing
: CPU에게 시간을 분할해서 할당하는 것

Multiprocess
: 프로그램을 여러개 동시에 실행하는 것

=> 위 4가지 용어는 비슷한 의미를 갖는다.

** Multiprocessor : 하나의 컴퓨터에 CPU(processor)가 여러개 붙어 있는 것

운영체제의 자원관리

CPU : 어떤 프로그램에게 CPU를 할당할까?
-> CPU 스케줄링

Memory : 한정된 메모리를 얼마나, 어떤 프로그램에게 할당할까?
-> 메모리 관리

Disk : 한정된 디스크에 파일을 어떻게 보관할까?
-> 파일 관리

I/O device : CPU와 I/O장치 간에 발생하는 속도 차이를 어떻게 관리할까?
-> 입출력 관리

프로세스 관리: 프로세스의 생성과 삭제, 자원 할당 및 반환, 프로세스간의 협력

그 외에도 운영체제는 네트워킹, 보호시스템, command line interpreter 등도 관리한다.

2차시 : 시스템 구조와 프로그램 실행

컴퓨터 시스템 구조

컴퓨터 시스템은 CPU, Memory 등으로 이루어진 컴퓨터와 Disk, 키보드, 프린터, 모니터 등으로 이루어진 I/O장치로 구성된다.

장치들의 역할

Memory : CPU의 작업 공간
CPU : 매 clock Cycle 마다 Memory에서 instruction을 하나씩 읽어서 실행한다.
Hard Disk : 데이터를 읽어서 Memory로 가져오거나 연산 결과를 저장하기도 한다. 입출력 역할을 동시에 수행한다.
Timer : 특정 프로그램이 CPU를 독점하는 것을 막는다.
Device controller : I/O장치를 관리한다. local buffer로 작업을 저장한다.

Mode bit

  • Mode bit을 통해 하드웨어적으로 두 가지 모드의 연산을 지원한다.

  • Mode bit이 0일때는 메모리, I/O device에 접근하는 것이 가능하다.

  • Mode bit이 1일때는 제한된 instruction만 실행 가능하다. CPU를 사용자 프로그램에게 넘겨줄 때 Mode bit은 1로 설정하여 제한된 접근을 수행한다. I/O 장치에서 interrupt가 들어오면 CPU 제어권이 OS로 넘어가서 mode bit이 0이 된다.

  • 1: 사용자 모드 : 사용자 프로그램 수행
    0: 모니터 모드 : OS 코드 수행(kernel 모드, 시스템 모드)

Timer

특정 프로그램이 CPU를 독점하는 것을 막기 위해서 운영체제가 프로그램에게 CPU를 넘겨 줄때는 Timer에 정해진 시간을 할당한 뒤에 넘겨준다. Timer가 끝나면 CPU에 인터럽트를 걸어서 CPU를 넘길수 있게한다.

Device Controller

각각의 I/O 장치를 관리하는 일종의 작은 CPU이다. control register, status register를 갖는다. 로컬 버퍼에 할일을 쌓아 둔다.
** device driver : 각 device를 접근하기 위해서 사용하는 software

DMA Controller
입출력 장치에 의해 CPU에 너무 많은 interrupt가 걸리기 때문에 그러한 장애를 방지하기 위하여 DMA를 사용한다. (DMA Controller는 하드웨어 장치이다.) DMA 컨트롤러는 memory에 CPU와 DMA가 접근할 수 있게 한다. Memory Controller는 DMA Controller와 CPU가 Memory의 같은 부분을 점유하지 못하도록 관리한다. DMA controller는 CPU와 상관없이 device controller의 local buffer에 저장된 데이터를 memory로 복사해 주는 일을 한다. 이때 buffer 저장소 내용을 메모리에 블럭단위로 전송한다. 그래서 byte단위가 아니라 block 단위로 CPU에 인터럽트를 발생시킨다.

인터럽트

입출력의 수행 과정

  • 사용자 프로그램은 OS를 통해 I/O 장치에 입출력을 요청 할 수 있는데 그것을 위해 사용자 프로그램이 OS의 kernel 함수를 호출하는 것을 System call이라고 한다.
  • OS는 사용자 프로그램이 올바른 요청을 한 것인지 확인하고 I/O 장치에 입출력을 요청한다.
  • I/O 장치의 일이 끝나면 CPU에 하드웨어 인터럽트를 건다.

넓은 의미의 인터럽트

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

인터럽트 수행 과정의 예시

  1. 사용자 프로그램이 I/O 장치를 사용하기 위해서 OS에 System call을 보낸다.(Software interrupt)
  2. OS가 I/O device Controller에 일을 시킨다.
  3. 장치의 일이 끝나면 device controller가 CPU에게 하드웨어 인터럽트를 걸어서 일이 끝났음을 알려준다.

** 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음

** 인터럽트 처리 루틴(Interrupt Service Routine, 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수

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

동기식 입출력(synchronous I/O)
I/O 요청이 있을 때, 해당 요청에 대한 입출력 작업이 완료된 후에야 사용자 프로그램에게 CPU를 넘기는 것이다.
사용자 프로그램이 Kernel에 I/O작업 요청을 하면 Kernel이 I/O 작업이 끝나기 전까지 CPU를 점유하다가 I/O interrupt가 들어오면 데이터와 CPU를 사용자 프로그램에게 넘긴다.

비동기식 입출력(asynchronous I/O)
I/O 작업이 진행된 후에 해당 작업이 끝나기를 기다리지 않고 CPU를 사용자 프로그램에게 넘기는 것이다.
사용자 프로그램이 Kernel에 I/O 작업을 요청하면 Kernel이 I/O 작업을 수행시키고 다시 CPU를 사용자 프로그램에게 넘겨준 뒤에 I/O interrupt가 들어오면 kernel이 CPU를 점유하여 데이터와 CPU를 다시 사용자 프로그램에게 넘겨준다.

저장장치 계층 구조

https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EA%B3%84%EC%B8%B5_%EA%B5%AC%EC%A1%B0

  • CPU Registers > Cache Memory > Main Memory > Magnetic Disk > Optical Disk > Magnetic Tape의 순으로 계층구조가 이루어진다.
  • 위로 갈수록 속도가 빠르고 비싸며 휘발성이다.
    ** Caching : 빠른 저장 시스템으로 정보를 복사하는 것

프로그램의 실행

  1. File System에 저장된 프로그램을 실행한다.
  2. Virtual Memory에 해당 프로그램의 Address space가 생성된다.(stack, data, code)
  3. Physical memory에 현재 필요한 부분만 Virtual Memory에서 가져와서 Address Translation을 하여 실행한다. 필요하지 않은 부분은 Disk의 Swap area로 밀어낸다.

커널 주소 공간의 내용

code

  • 커널 코드를 가진다.
  • 시스템 콜, 인터럽트 처리 코드
  • 자원 관리 코드
  • 서비스 제공 코드

data

  • CPU, memory, disk등의 자원을 관리하는 자료구조를 가진다.
  • 프로세스를 관리하는 Process Control Block을 가진다.

stack

  • process들의 커널 스택을 가진다.

🧾 추가 조사

Memory Mapped I/O vs I/O Mapped I/O

Memory Mapped I/O

  • CPU가 입출력 장치에 접근할 때, 입출력과 기억장치의 주소공간을 분리하지 않고 하나의 공간에 취급하여 배치하는 방식이다.
  • 기억장치 명령과 I/O 명령을 구별하지 않는다.
  • 메모리의 일부 공간을 I/O 주소 공간으로 할당한다.
  • 주소 영역을 공유하기 때문에 전체 메모리 사용에 제약이 있다.

I/O Mapped I/O(Port Mapped I/O)

  • 기억장치의 주소공간과 입출력장치의 주소공간의 액세스방식 및 저장방식을 완전히 분리하는 방식이다.
  • 기억장치 명령과 I/O 명령을 구별한다.
  • 전체 메모리 공간을 사용할 수 있다.
  • 분리된 메모리 영역을 사용하기 때문에 기억 장치 이용 효율이 높다.

참고 자료
https://velog.io/@sangh00n/User-program-and-System-Call
https://code-lab1.tistory.com/204
http://jidum.com/jidums/view.do?jidumId=467
https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5_%EC%9E%85%EC%B6%9C%EB%A0%A5

profile
개발자가 되고 싶은 감자

0개의 댓글

관련 채용 정보