본문 바로가기
CS/Operating System

운영체제(Operating System)란? - 1

by Dr.섭도 2024. 5. 29.

운영체제 개요

운영체제란?

컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
<그림: Operating System Concepts 10th>

운영체제가 할 일(What Operating Systems Do?)

  • 하드웨어: 계산 자원 제공 e.g.) 중앙 처리 장치(CPU), 메모리 및 입출력(I/O) 장치 등
  • 응용 프로그램: 사용자의 계산 문제를 해결하기 위해 자원이 어떻게 사용될 지 결정 e.g.) 워드, 스프레드시트, 컴파일러, 웹 브라우저 등
  • 운영 체제: 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조정

사용자 관점(User View)

사용자가 수행하는 일 또는 놀이(?)(work or play)의 최대화

사용의 용의성에 집중하고, 자원 이용에는 거의 신경쓰지 않음

임베디드와 같은 경우 운영체제와 응용 프로그램이 사용자 개입 없이 작동

시스템 관점(System View)

운영체제는 하드웨어와 가장 밀접한 프로그램으로, 자원 할당자(resource allocator)의 역할을 수행

CPU 시간, 메모리 공간, 저장장치 공간, 입출력 장치 등의 자원을 효율적이고 공정하게 배분하는 결정을 내린다

운영체제 = 제어 프로그램(Control Program), 특히 입출력 장치 제어와 작동에 깊이 관여

운영체제의 정의(Defining Operating Systems)

무어의 법칙(Moore's row): 반도체 집적 트랜지스터 수는 1~3년마다 2배 또는 그 이상 증가한다

데이비드 하우스의 수정본: 18개월마다 2배씩 증가하고 가격은 반으로 떨어진다

가격 문제로 인한 데이비드 하우스의 수정된 무어의 법칙은 깨진 것으로 볼 수 있다

  • 컴퓨터에서 항상 실행되는 프로그램인 커널
  • 응용 프로그램 개발을 돕는 미들웨어 프레임워크
  • 시스템 관리에 도움이 되는 시스템 프로그램

을 운영체제에 포함한다

컴퓨터 시스템의 구성(Computer-System Organization)

현대의 컴퓨터 시스템: 하나 이상의 CPU와 버스로 구성
버스: 공유 메모리 사이의 엑세스 제공 - 신호가 이동하는 통로

CPU와 장치 컨트롤러는 병렬로 실행되며, 메모리 사이클을 놓고 경쟁

인터럽트(Interrupts)

인터럽트는 운영체제와 하드웨어 상호 작용의 핵심
하드웨어는 시스템 버스를 통해 언제든 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다

CPU가 인터럽트 되면, CPU는 하던 일을 중단하고 즉시 고정된 위치(주솟값)로 실행을 옮긴다(= 다른 주솟값을 실행한다)
(고정된 위치: 인터럽트를 위한 서비스 루틴의 시작 위치 주솟값)
운영체제 커널 내에는 인터럽트 주소에 맞추어 해야할 일을 미리 저장해 두었는데, 이것이 인터럽트 벡터이다
처리가 완료되면(처리할 것은 인터럽트 처리 루틴(ISR, Interrupt Service Routine) 또는 인터럽트 핸들러(Interrupt Handler)라고 부른다)
인터럽트 서비스 루틴 실행 완료 후 인터럽트 된 연산을 재개
인터럽트 구조는 인터럽트 된 모든 정보를 저장해야 인터럽트 처리 후 정보를 복원할 수 있다
인터럽트 서비스 후 저장된 복귀 주소를 PC(Program Counter)에 적재하고, 인터럽트가 일어난 적 없던 것 처럼 다시 시작한다
장치 컨트롤러: 인터럽트 요청 라인에 신호를 선언하여 인터럽트를 발생(Raise)
CPU: 인터럽트를 포착(Catch), 인터럽트 핸들러로 디스패치(Dispatch)
핸들러: 장치 서비스 및 지우기(Clear)
<그림: Operating System Concepts 10th>

저장장치 구조(Storage Structure)

CPU는 메모리에 있는 명령만 실행할 수 있으므로, 프로그램을 먼저 메인 메모리에 올리는 과정이 필요하다(RAM)
컴퓨터 전원을 켜게 되면, 부트스트랩 프로그램이 실행되며, 운영체제를 메모리에 적재한다
메인 메모리는 모든 데이터를 저장하기에 크기가 작을 뿐더러, 전원 공급이 중단되면 내용을 모두 잃는 휘발성 저장장치이다
따라서 HDD나 NVM(Nonvolatile Memory)와 같은 보조 저장장치를 사용한다

입출력 구조

인터럽트 구동 I/O 형태는 대량 데이터 이동에서 높은 오버헤드를 유발할 수 있어 직접 메모리 엑세스(DMA)를 사용한다
DMA?(Direct Memory Access)
주변기기가 CPU의 처리를 거치지 않고 직접 RAM 또는 저장장치에 접근하여 필요 데이터를 가져오는 것
보안과 관련된 이슈가 생길 수 있다(유효한 요청인지 확인할 수 없음)
블록 단위로 전송하고 완료될 때 인터럽트를 발생시킨다
장치 컨트롤러가 전송작업을 수행하는 동안 CPU는 다른 작업을 수행할 수 있다

컴퓨터 시스템 구조(Computer System Architecture)

  • CPU: 명령을 실행하는 하드웨어
  • Processor: 하나 이상의 CPU를 포함하는 물리적 칩
  • Core: CPU 기본 계산 단위
  • MultiCore: 동일한 CPU에 여러 컴퓨팅 코어 포함
  • Multiprocessor: 여러 프로세서 포함

단일 처리기 시스템(Single-Processor Systems)

단일 처리 코어를 가진 하나의 CPU를 포함하는 단일 프로세서 사용

다중 처리기 시스템(Multiprocessor Systems)

우리가 대부분 사용하고 있음
프로세서 수가 늘면 적은 시간에 많은 작업을 수행할 수 있다(처리량의 증가)
그러나 프로세서가 하나의 작업을 수행할 때 문맥 교환(Context-Switching)이 일어나는데, 이 때 오버헤드가 발생한다
이로인해 프로세서가 늘어난다고 무한정 효율이 상승하는 것은 아니다

클러스터형 시스템(Clustered Systems)

둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성
각 노드는 다중 코어 시스템이며, 약결합(lossely coupled)라고 간주된다
클러스터링은 높은 가용성을 가지는데, 하나의 시스템이 고장 나더라도 계속 서비스가 제공될 수 있다

운영체제의 작동(Operating System Operations)

부트스트랩이 운영체제 커널을 메모리에 적재한다
운영체제는 인터럽트를 기다린다
하드웨어 인터럽트, 소프트웨어 인터럽트 등이 있다
트랩(예외)는 오류 또는 사용자 프로그램의 특정 요청으로 발생하며,특정 요청이라는 것은 시스템 콜이라는 특수 연산을 실행한다

다중 프로그래밍과 다중 태스킹(Multiprogramming and Multitasking)

다중 프로그래밍은 CPU가 항상 한 개는 실행할 수 있도록 프로그램을 구성
다중 태스킹(멀티태스킹)은 다중 프로그래밍의 논리적 확장
여러 프로세스를 전환하며 동시에 많은 작업이 일어나는 것 처럼 보인다
동시에 여러 프로세스를 메모리에 유지하려면 메모리 관리를 해야 한다
여러 프로세스가 동시에 실행될 때 누가 CPU를 쓸 지도 정해야 한다(CPU 스케줄링)
멀티태스킹에서 운영체제는 메모리의 한계를 극복하고자 가상 메모리 기법을 사용한다
프로그램이 물리 메모리의 크기보다 커도 실행이 가능해지는 이유이며, 사용자를 메모리 저장장치의 물리적 한계로부터 자유롭게 해준다

이중-모드와 다중모드 운용(Dual-Mode and Multimode Operation)

운영체제는 잘못된(악의적인) 프로그램으로 다른 프로그램 또는 운영체제 자체가 잘못 실행될 수 없도록 보장해야 한다
이를 위해 이중 모드(사용자 모드와 커널 모드)로 연산 모드를 나눈다 -> 이 또한 하나의 인터럽트이다
사용자가 운영체제로부터 서비스를 요청하면 사용자 모드에서 커널 모드로 변경된다. 이 요청을 시스템 콜이라 한다
<그림: Operating System Concepts 10th>

타이머(Timer)

시스템이 무한루프에 빠지지 않도록 일정 시간만 점유하도록 한다
타이머가 인터럽트를 발생시키면, 운영체제로 제어권이 넘어간다

자원 관리(Resource Management)

운영체제는 다양한 자원(e.g. CPU, 메모리 공간, 파일 저장 공간 등)을 관리해야 한다

프로세스 관리(Process Management)

프로그램을 실행하면 프로세스라 한다
프로세스가 일하려면 CPU 시간, 메모리, 파일, 입출력 장치 등 여러 자원을 필요로한다
프로그램 자체는 프로세스가 아니다
하나의 프로그램은 디스크에 저장된 파일처럼 수동적인 개체이지만, 프로세스는 다음 수행할 명령을 지정하는
프로그램 카운터(PC, Program Counter)를 가진 능동적 개체이다

A program is a passive entity, like the contents of a file stored on disk, whereas a process is an
active entity. A single-threaded process has one program counter specifying the next instruction to execute.

메모리 관리(Memory Management)

CPU 이용률과 사용시 컴퓨터 응답 속도 개선을 위해 여러 프로그램을 메모리에서 유지해야 한다
따라서 메모리 관리 기법을 필요로 한다

파일 시스템 관리(File-System Management)

파일은 정보 저장장치에 대한 균일한 논리적 관점이며, 운영체제는 저장장치 물리적 특성을 추상화해 논리적 저장 단위 파일을 정의한다
파일을 물리적 매체로 매핑해 저장장치를 통해 파일에 접근한다
파일은 정보, 데이터 등을 담은 집합이다

대용량 저장장치 관리(Mass-Storage Management)

HDD, NVM 등 보조 저장장치를 관리하는 것은 시스템 성능에는 중요하지 않다
어떤 운영체제는 이 역할을 응용 프로그램에 맡기기도 한다

캐시 관리(Cache Management)

정보는 보통 저장장치에 보관된다
정보가 사용됨에 따라 더 빠른 장치인 캐시에 일시적으로 복사한다
캐시에 정보가 있는지 먼저 확인하고 없으면 저장장치에서 직접 가져온다
사용될 확률이 높아 보이는(LRU, LFU) 정보는 캐시에 저장을 한다
멀티태스킹 환경에서는 동일한 값을 보장하는 동기화 문제가 생긴다
캐시 내의 값이 변경될 경우 여러군데 저장된 A의 모든 값이 다같이 바뀌어야 한다
이를 캐시 일관성 문제라고 한다

입출력 시스템 관리(I/O Systems Management)

효율적인 입출력 서브시스템을 숨겨놓고 관리한다

참고

https://os.ecci.ucr.ac.cr/slides/Abraham-Silberschatz-Operating-System-Concepts-10th-2018.pdf

https://baebalja.tistory.com/354