전공과목 정리/컴퓨터과학의이해

[컴퓨터과학의이해🧮] 운영체제 (3장)

최연재 2022. 8. 26. 00:55

교재 : 컴퓨터 과학 총론 (13th Edition)

(배운 내용을 책으로 복습하며 작성한 글입니다.)

1. 운영체제의 발전

 * 운영체제(operating system) : 컴퓨터의 전반적인 운영을 제어하는 소프트웨어 

ex) 마이크로소프트사의 윈도우, 유닉스, 리눅스

 ** 운영체제는 사용자가 파일을 저장하거나 불러올 수 있는 수단을 제공하며, 사용자가 프로그램 실행을 요청할 때 사용할 수 있는 인터페이스를 제공하고, 요청된 프로그램을 실행하기 위한 환경을 제공한다. 

 

- 운영체제는 프로그램 준비 작업을 쉽게만들고 작업들 사이의 전환을 단순화시키기 위한 시스템으로 출발하였다. 

- 초창기 운영체제에서 개발된 중요한 기능 중 하나는 사람들이 컴퓨터실을 드나들 필요가 없도록 사용자와 장비를 분리시킨 것이다. 

 

- 일괄처리(batch processing) : 운영체제가 한 번에 한 개씩 프로그램을 읽어 와서 실행을 시킨다.

  • 작업들을 모아 하나의 묶음으로 만들어두고 사용자의 개입 없이 이들을 실행시키는 작업 실행 방식을 취한다. 
  • 대용량 저장장치에 들어 있는 작업들이 작업 큐(job queue)에서 실행되기를 기다린다. 
  • 실제 대부분의 작업 큐들은 FIFO 구조를 엄격히 따르지는 않는데, 이는 대부분의 운영체제가 작업들의 우선 순위를 고려하기 때문이다. 
  • 초창기 일괄처리 시스템에서, 각 작업은 해당 작업을 위해 컴퓨터를 준비시키기 위한 단계들을 설명하는 일련의 지시사항을 수반한다. 
  • 지시사항은 작업 제어 언어(Job Control Language ; JCL) 로 불리는 체계를 사용하여 인코딩되고 작업 큐에 작업과 함께 저장되었다. 
  • 컴퓨터와 사용자 사이에 중개자로서 컴퓨터 운영자를 두는 방식의 주요 단점 :  사용자들이 일단 작업을 운영자에게 제출한 후에는 작업에 전혀 개입할 수 없다.

- 대화적 처리(interactive processing) 

  • 실행 중 사용자가 프로그램과 대화할 필요가 있는 경우를 수용 가능하다. (일괄처리의 단점 극복)
  • 실행되는 프로그램이 원격 단말기를 통해 사용자와 대화할 수 있게 해주는 새로운 운영체제들이 개발되었다. 
  • 성공적인 대화식 처리에 핵심적인 것은 사용자가 기다리지 않도록 컴퓨터의 동작이 충분히 빨라야 한다는 것이다. 

- 실시간 처리 (real-time processing)

  • 마감시간을 맞추며 컴퓨터 서비스를 제공하는 것
  • 실시간 처리로 수행되는 동작은 실시간으로 이루어진다고 표현된다. 
  • 컴퓨터가 작업을 실시간으로 수행한다는 표현은 컴퓨터가 작업을 충분히 신속하게 처리함으로써 외부의 실제 환경에서 일어나는 활동을 쫓아갈 수 있음을 의미한다. 

- 시분할 방식

대화식 시스템에서 여러 사용자가 컴퓨터에 대화식 서비스를 요청하는 경우, 실시간처리에서는 문제가 발생한다.

동시에 여러 사용자에게 서비스를 제공할 수 있도록 설계한 운영체제를 시분할 방식이라 한다. 

시분할 방식의 구현 방법 중 하나 :  멀티프로그래밍 (multiprogramming)

멀티프로그래밍 : 시간을 작은 구간들로 나누고 한 작업은 한 구간 동안만 실행시키는 기법 (각 구간이 끝날 때, 현재의 작업은 잠시 제쳐놓고 다음 구간 동안 다른 작업이 실행되도록 하는데, 작업들을 빨리 교대시키면 여러 작업이 동시에 실행되는 것처럼 보인다.)

오늘날 멀티프로그래밍 기법은 다중사용자 시스템뿐만 아니라 단일 사용자 시스템에서도 사용되는데, 단일사용자시스템의 경우 흔히 멀티태스킹(multitasking)이라는 표현을 사용한다. 

 

2. 운영체제의 구조

1) 소프트웨어 개관

- 응용 소프트웨어(application software) : 컴퓨터를 이용하는 작업을 수행하기 위한 프로그램들로 이루어진다. 

ex) 스프레드시트, 데이터베이스 시스템, 탁상용 출판 시스템, 회계 시스템, 프로그램 개발용 소프트웨어, 게임

- 시스템 소프트웨어 (system software) : 컴퓨터 시스템들에 공통된 작업들을 수행한다. 

- 운영체제 : 사용자 인터페이스, 커널

- 유틸리티 소프트웨어 (utility software) : 운영체제에는 포함되지 않지만 컴퓨터에서 기본적인 활동들을 수행하는 프로그램 (운영체제의 기능을 확장시켜주는 소프트웨어)

ex) 데이터 압축 소프트웨어, 멀티미디어 콘텐츠 재생을 위한 소프트웨어, 네트워크 통신을 처리하기 위한 소프트웨어

 

2) 운영체제 구성요소

- 사용자 인터페이스 (user interface)  : 컴퓨터들의 사용자들이 요청하는 동작들을 수행하기 위해서 운영체제가 사용자들과 대화할 수 있어야 하는데, 이러한 소통을 다루는 운영체제 요소

  • 셸(shell) : 예전의 사용자 인터페이스, 주로 키보드와 모니터 화면을 사용하여 텍스트 메시지를 통해 사용자와 대화
  • 컴퓨터 사용자와 운영체제의 실제 핵심요소 사이의 중재자의 역할을 수행한다.
  • 일부 운영체제에서는 사용자별로 자신에 적합한 인터페이스를 사용하기 위해 여러 인터페이스 중에서 선택하여 사용할 수 있다. 
  • 그래픽 사용자 인터페이스 (Graphic User Interface ; GUI ) : 처리 대상이 되는 항목을 디스플레이에서 아이콘 등과 같이 그림으로 표시
  • 윈도우 관리자 (window manager) : GUI 셸의 중요한 구성요소 중 하나
  • 윈도우 관리자는 윈도우라고 불리는 화면상의 공간을 할당하고 어느 응용프로그램에서 각 윈도우에 연계되어 있는지 추적하는 기능을 수행한다. 윈도우 관리자는 GUI의 스타일을 책임지며, 대부분의 윈도우 관리자는 구성에서 설정할 수 있는 다양한 선택들을 제공한다.

- 커널(kernal) : 운영체제 커널은 컴퓨터가 필요로 하는 가장 기본적인 기능을 수행하는 소프트웨어 요소들을 포함한다. 

① 파일 관리자(file manager)

: 컴퓨터의 대용량 저장장치 이용을 관장한다. 

  • 파일 관리자는 파일들을 디렉터리(directory) 또는 폴더(folder)라는 묶음으로 그룹을 나눈다. -> 사용자가 파일 조직화 가능
  • 디렉터리 경로 (directory path) : 디렉터리 안의 디렉터리로 이어지는 연결 사슬
  • 운영체제 외의 다른 프로그램의 파일 접근은 파일 관리자의 감독을 받는다. 

② 장치 관리자 (device driver)

: 컴퓨터에 연결된 주변장치에 동작들을 수행하기 위해 제어기와 통신하거나 또는 주변장치와 직접 통신하는 프로그램

  •  장치관리자는 각 장치 유형마다 존재하며, 일반화된 요청을 개별 장치가 요구하는 독자적인 일련의 명령들로 변환시킨다. 
  • 장치관리자를 통해 다른 프로그램이 개별장치들의 고유 특성들과 독립적으로 설계될 수 있고, 적절한 장치 관리자를 설치함으로써 개별 주변장치들에 맞출 수 있는 범용 운영체제를 구축할 수 있다. 

③ 메모리 관리자 (memory manager)

: 컴퓨터의 주기억장치 사용을 관장

  • 한 번에 하나의 작업만을 수행하는 컴퓨터 환경에서는 메모리 관리자가 하는 일이 많지 않다. 
  • 다중 이용자 또는 멀티태스킹 환경에서는 컴퓨터가 동시에 여러 요구에 답해야 하며, 메모리 관리자가 할 일이 많아진다. 
  • 요청된 주기억장치의 크기가 실제 컴퓨터에서 사용가능한 공간을 초과할 경우 메모리 관리자의 일이 더욱 복잡해진다. 
  • 페이징 (paging) : 프로그램과 데이터를 주기억장치와 대용량 저장장치 사이를 오가며 옮기는 기법
  • 페이징 기법을 사용해 메모리 관리자는 주기억장치를 확장하는 효과를 얻는다. 
  • 가상 메모리 (virtual memory)  : 페이징에 의해 만들어진 가상적인 큰 기억공간

④ 일정 관리자 (schedular)

: 컴퓨터 시스템에 존재하는 프로세스들에 대한 기록을 관리하고, 새로운 프로세스들을 여기에 추가하거나 완료된 프로세스들을 지운다. 

  • 새로운 프로세스들을 여기에 추가하거나 완료된 프로세스들을 지운다. 
  • 사용자가 응용 프로그램의 실행을 요청할 때, 현재 프로세스들의 집합에 요청된 응용프로그램의 실행을 추가한다. 
  • 모든 프로세스들을 추적하기 위해 주기억장치 안에 프로세스 테이블이라 불리는 정보 블록을 유지한다. 
  • 프로그램의 실행이 요청될 때마다  일정 관리자는 프로세스 테이블 안에 해당 프로세스를 위한 새로운 항목을 생성한다. 
  • 프로세스가 계속 진행될 수 있으면 준비 상태이고, 대용량 저장장치 작업의 완료, 키보드 동작, 다른 프로세스로부터의메시지 수신 등의 외부 이벤트가 발생할 때까지 진행이 연기되어 있으면 프로세스는 대기 상태이다. 

⑤ 실행 관리자 (dispatcher)

: 일정이 잡혀 있는 프로세스들의 실행을 감독하는 커널 구성 요소

  • 시분할/멀티태스킹 시스템에서 멀티프로그래밍에 의해 달성된다. 
  • 시간을 할당 시간(time slice)이라 불리는 짧은 구간으로 나눈 다음, 각 프로세스가 할당 시간을 초과하지 않도록 프로세스들 사이에서 CPU를 전환시켜준다. 
  • 한 프로세스에서 다른 프로세스로 전환하는 절차를 프로세스 스위치(process switch) 또는 콘텍스트 스위치(context switch)라 부른다. 
  • 실행 관리자가 프로세스에게 할당 시간을 부여할 때마다 실행 관리자는 타이머 회로를 가동시키는데, 이 회로는 인터럽트(interrupt)라 불리는 신호를 생성하여 할당 시간이 끝났음을 알린다. 
  • CPU가 인터럽트 신호를 받을 경우, 현재의 기계 주기를 마친 후, 현재 프로세스 위치를 저장한 다음, 인터럽트 처리기(interrupt handler)라고 불리는 프로그램의 실행을 시작하는데, 이 프로그램은 주기억장치의 지정된 위치에 저장되어 있을 것이다. 
  • 인터럽트 처리기는 실행 관리자의 일부이며, 실행 관리자가 어떻게 인터럽트 신호에 반응해야 할지 정해놓은 것이다.
  • 인터럽트 신호의 효과는 현재 진행 중인 프로세스를 멈추고 제어를 실행 관리자에게 넘겨주는 것이다.
  • 실행관리자는 준비 상태에 있는 프로세스 중 우선순위가 가장 높은 프로세스를 프로세스 테이블에서 선택하고, 할당 시간에 맞추어 타이머 회로를 다시 작동시키고, 선택된 프로세스에게 제어를 넘긴다. 

 

 

 

3) 운영체제의 시동

- 운영체제의 시동은 부트스트래핑(boot strapping) 또는 부팅(booting) 이라 부르는 절차에 의해 이루어진다. 

- 대용량 저장장치에 영구적으로 저장되어 있는 운영체제를 전원이 켜질 때 비어있는 상태의 주기억장치로 옮기는 작업

- CPU에 전원이 들어올 때마다 프로그램 카운터는 미리 정해져 있는 특정 주소(CPU가 실행될 프로그램의 시작위치로 생각하는 주소)를 가리키도록 CPU가 설계되어 있다. 

- 컴퓨터의 주기억장치는 대개 휘발성 메모리로 만들어져 있기 때문에 전원을 끄면 그 안에 저장되었던 모든 데이터가 지워진다. 

- CPU가 초기 프로그램이 들어 있을 것으로 기대하는 곳에 위치한 주기억장치의 작은 부분에 특별한 비휘발성 메모리 셀(ROM ; Read Only Memory) 을 사용한다. 

- 범용 컴퓨터의 경우 부트 로더(boot loader)라 불리는 프로그램이 컴퓨터의 ROM에 영구적으로 저장되어 있다. 

- 펌웨어 (firmware)  : ROM에 저장되어 있는 프로그램으로 이는 하드웨어에 영구적으로 기록된 소프트웨어로 이루어져 있다. 

- 부트스트랩 프로그램 안의 명령들이 하는 일은 CPU로 하여금 대용량 저장장치의 특정 위치에 저장된 운영체제를 주기억장치의 휘발성 영역으로 옮기는 것이다. 

- 운영체제가 주기억장치로 옮겨진 다음에는 부트스트랩이 CPU에게 운영체제의 시작 부분으로 점프 명령을 실행하도록 지시한다. 

- 이 시점에서 운영체제가 컴퓨터를 접수하여 컴퓨터 활동을 제어하기 시작한다. 

- 부트스트랩을 실행시키고 운영체제를 가동시키는 전체 과정을 부팅이라 한다. 

- ROM 안에 저장되어 있는 운영체제나 부트 로더를 업데이트하는 것(== 펌웨어 업데이트, firmware update)이 가능하긴 하지만, 기술적인 한계가 있어 일반 컴퓨터 시스템에서는 대개 대용량 저장장치에 운영체제를 저장한다. 

- 컴퓨터를 처음 켜면, 부트 로더가 운영체제를 읽어 들여 가동시킨다. 사용자는 운영체제에 유틸리티 프로그램이나 응용프로그램의 실행을 요청한다. 각 유틸리티 프로그램이나 응용 프로그램이 종료하면, 사용자는 다시 운영체제와 대화상태에 놓이며 이때 사용자는 또 다른 요청을 할 수 있다. 

 

3. 컴퓨터 활동의 조정

1) 프로세스 개념

- 프로그램 : 명령들의 정적인 집합

- 프로그램 실행  : 시간의 경과에 따라 성질이 변하는 동적인 활동

- 프로세스 (process) : 운영체제의 제어 하에서 프로그램을 실행시키는 활동

- 프로세스에는 프로세스 상태(process state)라 불리는 현재 상태 정보가 연계되어 있다. 

- 프로세스 상태에는 프로그램의 현재 실행 위치와 함께 다른 CPU 레지스터 및 관련 메모리 셀들의 값이 포함된다. 

- 일반적인 시분할/멀티태스킹 컴퓨터에서는 실행 중인 여러 프로세스들이 컴퓨터 자원을 이용하기 위해 경쟁한다. 

- 각 프로세스들이 주변장치, 주기억장치의 공간, 파일에 대한 접근, CPU에 대한 접근 등의 필요한 자원을 얻고, 독립적인 프로세스들이 서로 방해하지 않고, 정보를 교환할 필요가 있는 프로세스들이 그렇게 할 수 있도록 프로세스들을 관리하는 것이 운영체제의 역할이다. 

 

2) 프로세스 관리

- 프로세스들의 실행을 조정하는 작업을 처리하는 것은 운영체제 커널 내부에 있는 일정 관리자와 실행 관리자이다. 

- 멀티프로그래밍 시스템의 성공에 중요한 것은 프로세스를 멈추었다가 나중에 다시 시작할 수 있는 기능이다. 

- 프로세스의 경우에는 프로세스의 상태를 다시 만들어야 한다. 

- 멀티프로그래밍의 사용으로 컴퓨터의 전반적인 효율성은 향상된다. 

 

4. 프로세스 간의 경쟁에 대한 처리

1) 세마포어

ex) 프린터에 대한 접근 제어 ->  운영체제는 프린터가 이미 할당되어 있는지 여부를 추적해야 한다. 

- 플래그 :  한 비트 값으로, 지정(set) 상태와 해제(clear) 상태로 불리는 상태 값

(0 값으로 표현되는 해제 플래그 : 프린터 사용 가능 / 1 값으로 표현되는 지정 플래그  : 프린터가 이미 할당됨)

- 플래그를 검사하고 지정 상태로 변경하는 작업은 여러 개의 기계 명령을 요할 수도 있다. 

- 하나의 작업에서 해제 플래그를 확인한 다음 다시 지정 상태로 변경하기 전에 인터럽트 신호를 받을 수 있다. 

- 위의 문제의 해결책은 플래그의 검사에서 지정 상태로의 변경에 이르는 작업을 인터럽트에 의한 중단 없이 완료시키는 것이다.

- 인터럽트의 중단 없이 작업을 완료시키는 방법 : *인터럽트 차단(interrupt disable) 명령과 인터럽트 허용(interrupt enable) 명령, **검사-지정(test-and-set) 명령 사용

 

* 인터럽트 차단 명령이 실행되면 이후에 일어나는 인터럽트를 차단해주며, 인터럽트 허용 명령은 CPU가 인터럽트 신호에 반응하는 것을 재개시킨다. 

** 하나의 기계어 명령에서 CPU로 하여금 플래그 값을 읽고, 값을 확인하고, 다시 지정하도록 지시한다. 인터럽트를 인지하기 전에 CPU가 현재 실행 중인 명령을 완료하므로, 한 개의 명령 안에 구현되어 있는 플래그에 대한 검사와 지정이 분리되지 않는다. 

 

- 세마포어 (semaphore) : 플래그가 적절히 구현된 경우

- 임계 구역 (critical region) : 일련의 명령 블록

- 상호 배제 (mutual exclusion) : 한 번에 하나의 프로세스만이 임계 구역을 실행하도록 허용하자는 요구사항

- 임계 구역에 대한 상호 배제를 달성하는 일반적인 방법이 세마포어로 임계 구역을 보호하는 것이다. 

 

2) 교착상태

교착 상태 (deadlock) : 둘 이상의 프로세스가 서로 상대방에 할당된 자원을 기다리느라 어느 프로세스도 진행하지 못하는 상태

- 교착상태는 시스템의 성능을 크게 떨어뜨릴 수 있다. 

- 교착상태가 발생하지 않는 조건(세 가지 모두 충족해야 발생하지 않음)

① 공유할 수 없는 자원에 대한 경쟁 존재

② 자원에 대한 단계적으로 이루어진다. 즉, 프로세스가 일부 자원을 얻은 후, 나중에 다른 자원을 요청한다. 

③ 일단 자원이 할당되면, 강제로 회수할 수 없다. 

- 교착상태 회피 기법 : ①, ②번 제거

; 번 제거 :  경쟁 자체를 없애는 것이 아니라 공유할 없는 자원을 공유할 수 있는 자원으로 변환시키는 방법 사용(스풀링)

; ②번 제거 : 각 프로세스가 한 번에 모든 자원을 요청하도록 함으로써 두 번째 조건을 예방하는 것이다. 

* 스풀링 (spooling) : 나중에 보다 편할 때 출력할 데이터를 저장하는 기법

- 교착상태 탐지 및 해결 기법 : ③번 제거 

; 교착상태는 좀처럼 발생하지 않는 것으로 간주되며, 교착상태의 발생 자체를 피하기 위한 어떤 노력도 하지 않는다.

 

5. 보안

1) 외부로부터의 공격

- 운영체제가 수행하는 중요한 작업 중 하나 : 컴퓨터 자원을 인가되지 않은 사용자가 접근하지 못하도록 보호->계정

 

- 계정(account) : 사용자 이름, 비밀번호, 사용자에 주어지는 권한 등의 항목을 포함하는 운영체제 내부의 레코드

- 운영체제는 로그인 절차 동안 계정 정보를 사용해 시스템에 대한 접근을 제어한다. 

- 관리자 (administrator, super user) : 계정을 관리하는 사람

관리자는 컴퓨터 내부의 활동들을 감시할 수 있다.

  • 감사 소프트웨어(auditing software) : 컴퓨터 시스템에서 발생하는 활동들을 기록하고 분석하는 유틸리티
  • 감사 소프트웨어가 감지할 수 있는 상황 ①: 틀린 비밀번호를 사용하여 로그인하려는 시도의 반복 감지
  • 감사 소프트웨어가 감지할 수 있는 상황 ②: 특정 사용자가 정상적으로 로그인 후 활동이 과거 행동 패턴과 일치하지 않은 경우
  • 감사 소프트웨어가 감지할 수 있는 상황 ③ : 스니퍼(sniffing system) ; 컴퓨터에서 실행되면서 활동들을 기록하고 나중에 침입자에게 이를 보고하는 소프트웨어

 

2) 내부로부터의 공격

- 침입자가 컴퓨터 시스템에 접근해 탐색하는 것을 막아야 한다.

- 프로세스가 메모리 관리자를 통해 할당받은 메모리 영역에만 접근할 수 있게 제한

  • 멀리프로그래밍 시스템용으로 설계된 CPU들은 각 프로세스에 할당된 메모리 영역의 상한선 및 하한선 주소를 저장할 수 있는 특별한 레지스터를 가지고 있다. 
  • 프로세스를 수행하는 동안 각 메모리 참조에 대해 지정된 영역 안에서 이루어지도록 위 레지스터의 값들과의 비교 수행
  • 프로세스의 지정 영역 밖의 대한 참조일 경우, CPU는 운영쳐제가 적절한 조치를 취할 수 있도록 인터럽트 메커니즘에 의해 제어를 자동적으로 운영체제에 넘길 것이다.
  • 하지만 특별용도 레지스터들의 값을 변경하면, 지정 영역 밖의 메모리 셀들에 접근할 수 있을 것이다.
  • 메모리 영역을 늘리고 싶을 경우 메모리 상한선을 나타내는 레지스터의 값을 증가시킴으로써 운영체제의 승인 없이 추가의 메모리 공간을 사용 가능

- 특권 수준 (privilege level) : 특권 모드, 비특권 모드

  • 설정된 수준에 따라 달리 동작하도록 설계
  • 특권 모드 (privileged mode)에서는 CPU는 기계어에 들어 있는 모든 명령 실행 가능
  • 비특권 모드 (nonprivileged mode)에서는 허용되는 명령이 제한된다. 
  • 특권 명령 (privileged instruction) : 특권 모드에서만 쓸 수 있는 명령
  • CPU가 비특권 모드에 있을 때, 특권 명령을 실행하려 하면 인터럽트가 발생한다. 이 경우 인터럽트는 CPU를 특권 모드로 전환시키면서 제어를 운영체제 안의 인터럽트 처리기로 넘긴다. 
  • 처음 전원이 켜지면 CPU는 특권 모드에 있지만, 운영체제가 "특권 모드 변경" 명령을 실행시켜 CPU를 비특권 모드로 전환시킨다.