a

[OS]

박은성/ 2022. 7. 15. 20:51
반응형

01. 운영체제의 개요

 

1. 운영체제의 정의

운영체제는 컴퓨터 전원을 켜면 가장 먼저 만나는 소프트웨어이다.

 

운영체제가 없는 mp3플레이어는 처음 만들 때 구현한 기능 외에 다른 기능은 사용할 수 없다. 그러나 임베디드 운영체제가 있는 mp3 플레이어는 음질을 향상시키거나 mp3 파일 외에 다양한 종류의 포맷을 지원하도록 기능을 추가할 수 있다. 또 무선 통신을 활용하여 mp3 파일을 다운로드하거나 다른 사람과 mp3 파일을 공유할 수도 있다. 즉, 운영체제가 있는 mp3 플레이어는 계속 기능을 향상시킬 수 있다.

 

운영체제의 역할

운영체제가 없는 컴퓨터도 작동은 한다. 세계 최초의 컴퓨터인 에니악도 운영체제 없이 작동했다. 그러면 운영체제는 왜 필요할까?

 

1) 성능 향상

  우리는 어떤 변화를 주어 기능을 바꿀 수 있는 기계를 '컴퓨터'라고 한다. 이러한 관점에서 에니악 같은 경우는 매번 회로를 변경해야 하는 번거로움이 있고 복잡한 기능은 구현하기 어렵다는 단점이 있다. 운영체제가 있는 기계는 기능을 추가하거나 성능을 변경시키는 것이 훨씬 쉽다.

2) 자원 관리

   운영체제는 자원 관리(resource management)라는 중요한 역할도 맡고 있다. 많은 응용 프로그램(application)에 대해 하나의 키보드, cpu, 메인메모리, 모니터로 처리할 수 있어야 한다. 자원을 어느 응용 프로그램에 줄지 결정하는 중재자가 바로 운영체제이다.

3) 자원 보호

  어떤 응용 프로그램이 자신의 작업 영역을 넘어 남의 영역을 침범하면 데이터가 손상될 수 있다. 이것을 막아야 한다.

4) 사용자 인터페이스 제공

  운영체제는 사용자 인터페이스(GUI)를 제공하므로 대부분의 작업이 마우스로 가능하다. 

 

운영체제의 정의

지금까지 살펴본 운영체제의 역할들에서 운영체제는 '사용자에게 편리한 인터페이스를 제공하고 자원을 효율적으로 관리하는 소프트웨어'라고 정의 내릴 수 있다.

프로세스 관리 프로세스에 CPU를 배분하고 작업에 필요한 환경을 제공한다.

메인메모리 관리 프로세스에 작업 공간을 배치하고 실제 메인메모리보다 큰 가상 공간을 제공한다.

저장 장치 관리 데이터를 저장하고 접근할 수 있는 인터페이스를 제공한다.

 

2. 운영체제의 구조

운영체제는 커널과 사용자 인터페이스로 구성되며, 커널 내에는 드라이버와 시스템 호출 기능이 있다.

 

커널과 사용자 인터페이스

커널은 프로세스 관리, 메모리 관리, 저장 장치 관리 같은 운영체제의 핵심 기능을 모아 놓은 것이다. 자동차에 비유하면 엔진에 해당한다. 사용자 인터페이스는 운영체제가 사용자와 응용 프로그램에 인점하여 커널에 명령을 전달하고, 실행 결과를 사용자와 응용 프로그램에게 돌려주는 기능을 한다. 

 

시스템 호출

모든 응용 프로그램은 운영체제 위에서 작동하기 때문에 운영체제가 불안정하면 다른 응용 프로그램도 불안정하다. 따라서 운영체제는 바이러스나 악의적인 소프트웨어에서 자기 자신과 하드웨어를 보호해야 한다. 운영체제는 사용자가 직접 자원에 접근하는 것을 막음으로써 자원을 보호한다.

운영체제에서 어떤 작업을 부탁할 때는 시스템 호출(system call)을 사용한다. 시스템 호출은 사용자가 커널을 사용할 수 있도록 운영체제가 제공하는 프로그램 함수의 집합이다.

 

드라이버

운영체제는 다양한 종류의 하드웨어를 사용할 수 있도록 하드웨어 인터페이스를 제공한다. 이를 드라이버라고 한다.

장치 드라이버, 디바이스 드라이버, 장치 제어기, 소프트웨어 드라이버라고도 한다. 마우스나 키보드 같은 드라이버는 운영체제를 설치할 때 자동으로 설치되지만, 그래픽 카드나 프린터 같이 복잡한 드라이버는 cd 형태로 제품과 함께 제공되거나 따로 설치해야 한다.

nvidia의 그래픽 카드도 따로 드라이버를 다운받아야 한다.

 

3. 운영체제의 역사

세상에는 많은 종류의 운영체제가 있는 것 같지만, 커널만 놓고 보면 유닉스 커널과 윈도우 커널을 사용하는 운영체제 둘 뿐이다. 마이크로소프트의 윈도우 운영체제는 돈을 주고 사야 하는데, 스마트폰 운영체제는 무료이다. 왜 그럴까?

 

유닉스

1960년대 이전까지만 해도 컴퓨터는 아주 기능이 단순했다. 고가의 컴퓨터를 한 사람만 이용하거나 한 가지 작업에만 사용하는 것은 낭비이므로 여러 사람이 다양한 방법으로 이용할 수 잇는 운영체제 개발을 시도했다. 여러 명이 동시에 사용할 수 있는 운영체제는 1969년 AT&T의 연구원인 켄 톰프슨(Ken Thompson)이 개발했는데, 이것이 유닉스(UNIX)이다. 유닉스는 소스코드를 공개하여 많은 사람들이 개선하기 시작한다. 이렇게 발전하여 현재까지 발전한 유닉스를 System V 계열 유닉스라고 한다. 

 

1970년대 말 캘리포니아대학교 버클리 캠퍼스에서도 유닉스 소스코드를 구이뱋ㅆ는데, 빌 조이(Bill Joy)와 척 헤일리(Chunk Haley)라는 학생이 소스코드를 수정하여 만든 유닉스를 1978년에 출시한다. 이것이 BSD(Berkeley Software Distribution)계열 유닉스다. BSD계열 유닉스는 공짜로 사용할 수 있는 FreeBSD로 발전했다.

 

리눅스

1991년에 리누스 토르발스(Linus Torvalds)가 개인용 컴퓨터에서 동작하는 유닉스 호환 커널을 만들어 공개했다. 이전까지는 대형 컴퓨터에만 쓰이던 유닉스를 PC에서도 쓸 수 있게 되었는데, 이것이 바로 리눅스(Linux)다. 리눅스는 FreeBSD를 기반으로 만들었기 때문에 누구나 공짜로 사용할 수 있었고, 소스코드도 공개했다.

스마트폰의 보급에 따라 구글은 리눅스 커널을 가져다가 스마트폰에서 사용할 수 있는 운영체제를 개발했는데, 이것이 바로 안드로이드다.

 

맥OS

한편 애플은 FreeBSD를 변형하여 매킨토시 컴퓨터에서 동작하는 운영체제를 만들었는데, 이것이 맥OS다. 

 

GNU

유닉스를 이해하기 전에 먼저 GNU(GNU is Not Unix)를 이해할 필요가 있다. 스톨만이 만든 GNU 프로젝트는 1983년 9월 27일 유즈넷을 통해 일반인에게 알려졌다. GNU는 소프트웨어를 돈 주고 사는 대신에 누구나 자유롭게 '실행, 수정, 복사, 배포'할 수 있게 하자고 주장했다. 이러한 GNU 정신에 입각해서 만든 소프트웨어에 주어진 라이선스를 GPL(General Public License)라고 하며, 저작원인 'copy right'에 반해 'copy left'라고 했다. 1985년에 스톨만은 GNU 프로젝트를 기조로 자선단체인 자유소프트웨어재단(Free Software Foundation, FSF)를 세웠다. 이 재단은 자원 봉사자가 대부분 개발에 참여하며, 많은 소프트웨어를 개발하여 배포하낟. 

 

윈도우

또 다른 PC 운영체제로 마이크로소프트의 MS-DOS가 있다. MS-DOS에 GUI를 붙인 것이 윈도우다. 

유닉스는 소스코드가 공개되어 많은 사람이 연구와 수정을 거친다. 그러나 윈도우는 마이크로소프트의 몇몇 연구원이 개발해서 무겁고 불안한 운영체제다. 가끔 윈도우 OS가 중단되면 파란 화면이 나타나기도 한다. 

돈을 주고 사야함에도 윈도우 운영체제가 리눅스보다 사용하기 편리하므로 널리 보급되었다. 

 

02. 프로세스 관리

운영체제의 핵심인 커널의 중요한 기능은 프로세스 관리, 메인메모리 관리, 저장 장치 관리이다. 차례대로 살펴보자

 

1. 프로그램과 프로세스의 차이

운영체제에서 프로세스는 하나의 작업 단위이다. 사용자가 마우스를 더블클릭하여 프로그램을 실행하면 그 프로그램은 프로세스가 된다. 크롬 브라우저를 실행한다고 하면, 크롬 프로그램은 하드디스크에 저장돼 있다. 이를 마우스로 클릭하여 실행시키면 한 프로세스가 된다. 

프로그램과 프로세스의 관계는 레시피와 요리의 관계라 할 수 있다. 레시피가 실제 요리가 되려면 주방에서 레시피에 따라 조리해야 한다. 다시 말해 레시피는 요리 방법을 모아 놓은 정적인 데이터이며, 조리 과정을 거쳐 실제 요리가 된다. 레시피가 프로그램, 요리는 프로세스라고 할 수 있다.

 

우리는 프로그램을 '짠다'라고 한다. 프로그램은 어떤 데이터를 사용해 어떤 작업을 할지 절차를 적어놓은 것이다. 반면에 프로세스는 '실행한다'고 표현하는데, 프로그램으로 작성된 작업 절차를 실제로 실행에 옮긴다는 의미이다. 따라서 누군가가 작성한 프로그램이 실행되면 프로세스가 된다.

 

프로그램은 하드디스크 같은 저장 장치에 보관하고 있다가 마우스로 더블클릭하면 실행된다. 폰 노이만 구조에서 프로그램이 실행된다는 것은 해당 코드가 메모리에 올라와서 작업이 진행된다는 의미이다. 프로그램은 저장 장치에 저장된 정적인 상태고, 프로세스는 실행을 위해 메모리에 올라온 동적인 상태다.

 

2. 프로세스의 상태

컴퓨터작업은 크게 일괄 처리 작업(batch job)과 시분할 작업(time sharing job)으로 나뉜다. 일괄 처리 작업은 한 번에 작업을 1개만 처리하는 시스템으로, 과거 컴퓨터 초창기의 운영체제나 MS-DOS가 사용하던 방식이다. 시분할 작업은 프로세스 여러 개가 아주 짧은 시간 동안만 CPU를 사용하는 방시그올, 프로세스 여러 개가 동시에 실행되는 것처럼 보인다. 컴퓨터의 CPU는 1개이지만 인터넷 서핑을 하고 음악을 들으며 문서 작업을 동시에 할 수 있는 이유는 운영체제가 시분할 작업을 지원하기 때문이다.

운영체제에서 프로세스 제어 블록(Process Control Block, PCB)로 프로그램이 요구하는 일련의 작업을 기록해 둔다. 프로세스가 종료되면 메모리에서 삭제되고, PCB도 폐기된다.

 

프로그램이 프로세스가 된다는 것은 운영체제에서 프로세스 제어 블록을 얻는다는 의미고,(+).

프로세스가 종료된다는 것은 프로세스 제어 블록을 폐기한다는 의미이다.

 

프로세스 상태는 다음과 같다.

- 생성 상태

생성 상태(create status)는 프로세스가 메모리에 올라와 실행 준비를 완료한 상태이다. 프로세스를 관리하는 데 필요한 프로세스 제어 블록을 생성한다.

 

- 준비 상태

준비 상태(ready status)는 생성된 프로세스가 cpu를 차지할 때까지 기다리는 상태이다. 한 번에 한 프로세스만 실행할 수 있으므로, 자기 실행 순서가 올 때가지 기다려야 한다.

 

-실행 상태

실행 상태(running status)는 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태로 'execute status'라고 표현하기도 한다. 실행 상태에 들어간 프로세스는 일정 시간 동안 CPU를 사용할 권리를 갖는다. 주어진 시간 안에 작업이 끝나지 않으면 프로세스는 준비 상태로 돌아와 다음 차례를 기다린다. 

 

- 완료 상태

완료 상태(terminate status)는 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 완료 상태로 진입한다. 즉, PCB가 사라진 상태이다. 

 

03. 메인메모리 관리

1. 프로세스와 메모리 관리

  폰 노이만 구조의 컴퓨터에서 메모리는 유일한 작업 공간이며 모든 프로그램은 메모리에 올라와야 실행이 가능하다. 과거 일괄 처리 시스템에서는 한 번에 작업을 하나만 처리했으므로 메모리 관리가 어렵지 않았다. 그러나 오늘날 시분할 시스템에서는 운영체제를 포함한 여러 프로세스가 한꺼번에 메모리에 올라오기 대문에 메모리 관리가 복잡하다.

  바이러스 프로세스는 운영체제 영역으로 침범하여 시스템을 망치려고 하는 대표적인 프로세스이다. 따라서 메모리 영역은 운영체제 영역과 일반 영역으로 나눈 후, 어떤 일반 프로세스도 운영체제 영역으로 침범할 수 없도록 막는다. 일괄 처리 시스템은 운영체제를 제외한 나머지 영역을 프로세스가 독차지하기 때문에 메모리 관리가 수월하다. 일반 프로세스가 운영체제 영역으로 침범하지 못하게 막기만 하면 된다. 반면에 시분할 시스템은 메모리 관리가 복잡하다. 운영체제 영역으로 침범하는 걸 막을 뿐만 아니라, 다른 작업 영역으로 침범하는 것도 막아야 한다. 또 자리가 부족하면 빈 공간을 확보해 주어야 하고, 프로세스가 끝나면 있던 자리를 깨끗하게 치워야 한다. 이처럼 복잡한 메모리 관리는 메모리 관리 시스템(Memory Management System, MMS)이 담당한다. 일반적으로 메모리 관리자라고 일컫는다.

 

메모리 관리자가 하는 작업은 가져오기(fetch), 배치(placement), 재배치(replacement) 작업으로 나눌 수 있다.

- fetch

프로세스와 데이터를 메모리로 가져오는 것이다. 메모리 관리자는 사용자가 요청하면 프로세스와 데이터를 모두 메모리로 가져온다.

 

- placement

배치 작업은 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 것이다. 배치 작업 전에 메모리를 어떤 크기로 자를지가 더 중요하다. 같은 크기로 자르느냐, 실행되는 프로세스 크기에 맞게 자르느냐에 따라 메모리 관리 기법이 달라진다. 

 

- replacement

새로운 프로세스를 가져와야 하는데 메모리가 꽉 찬 경우는 메모리에 있는 프로세스를 하드디스크로 옮겨 놓아야 새로운 프로세스를 메모리에 가져올 수 있다. 이처럼 오래된 프로세스를 내보내고 새로운 프로세스를 가져오는 작업이 재배치 작업이다.

 

2. 가상 메모리

현대 메모리 관리의 가장 큰 특징은 사용자가 갖고 있는 실제 메모리 크기와 프로세ㅡ가 올라갈 메모리 위치를 신경쓰지 않고 프로그래밍하도록 지원하는 것이다. 이러한 메모리 시스템을 가상 메모리(virtual memory)라고 한다. 가상 메모리는 실제 메모리 크기와 상관없이 프로세스에 커다란 메모리 공간을 제공하는 기술이다. 프로세스는 실제 메모리 크기가 어느정도인지 신경 쓰지 않고 메모리를 마음 대로 쓸 수 있다.

메모리가 모자라서 쫓겨난 프로세스는 저장장치의 특별한 공간에 모아 둔다. 이러한 영역을 스왑 영역(swap area)라고 한다. 스왑 영역은 하드디스크와 같은 저장 장치에 있지만, 메모리가 관리하는 특수 영역이다. 원래 하드디스크 같은 저장 장치는 저장 장치 관리자가 담당한다. 그러나 스왑 영역은 메모리에서 쫓겨났다가 다시 돌아갈 데이터가 머무는 곳이기에 저장장치는 장소만 빌려주고 메모리 관리자가 담당한다.

절전모드를 사용하면 CPU와 메모리의 전력 공급이 끊기기 때문에 메모리에 있는 내용들이 사라진다. 그러므로 원래 작업을 복구하려면 현재 메모리에 있는 데이터를 어딘가에 옮겨야 하는데, 이때 옮겨 가는 곳이 스왑 영역이다. 

말하자면, 가상 메모리 시스템은 실제 메모리와 스왑 영역을 활용하여 메모리 크기에 상관없이 모든 프로그램을 실행할 수 있는 시스템을 가리킨다. 가상메모리 크기 = 실제 메모리 크기 + 스왑 영역

이 스왑 영역은 사용자가 조절할 수 있다.

 

04. 저장장치 관리 

1. 파일

파일은 데이터의 집합으로 하드디스크나 저장 장치에 저장한다. 문서, 이미지, 동영상, 음악 등이 해당된다. 컴퓨터 내에는 여러 종류의 파일이 있는데 이를 구분하려고 확장자를 사용한다. 홍길동이라는 이름의 사람이 여러 명일 때 '홍길동.한국' '홍길동.일본' 이렇게 명명하면 각각을 구분할 수 있듯 파일에 확장자를 붙이면 파일 성격을 알 수 있다.

 

초창기 운영체제는 파일이름이 여덟 글자, 확장자는 세 글자로 제한했다. 그 영향으로 아직도 파일 확장자는 세 글자 이하가 대부분이지만, 네 글자나 다섯 글자도 있다. 이미지 파일인 JPEG 포맷의 확장자는 jpg이다.

 

여러 종류의 파일에는 공통적으로 헤더가 달려 있다.

파일 헤더에는 파일 이름, 버전, 크기, 만든 날짜 등 정보가 저장된다. 헤더는 여러 조미료 통에 조미료 이름, 무게, 만든 날자 등을 적어 놓은 스티커와 같다. 

 

운영체제 입장에서 보면 파일은 실행 파일과 데이터 파일로 나눌 수 있다. 실행 파일은 운영체제가 메모리로 가져와 CPU를 사용하여 작업하는 파일이다. 사용자의 요청으로 프로세스가 되는 파일을 의미한다. 데이터 파일은 프로세스나 응용 프로그램이 사용하는 데이터를 모아 놓은 파일이다. 따라서 컴퓨터에서 실행 파일이 프로세스가 되면 여러 가지 데이터 파일을 사용한다.

 

윈도우에서 실행 파일을 더블클릭하면 프로세스를 생성하여 실행한다. 반면에 데이터 파일을 더블클릭하면 해당 파일을 사용하는 응용 프로그램을 실행한다. 이러한 프로그램을 연결 프로그램이라고 한다. 

 

2. 디렉터리

디렉터리는 관련있는 파일을 하나로 모아놓은 곳이다. 디렉터리는 여러 층으로 구성할 수 있다. 이때 최상위 디렉터리는 루트(root)라고 한다. 디렉터리 도한 파일이므로 헤더를 갖고 있다. 

 

3. 파일 시스템

하드디스크처럼 저장 장치를 처음 사용할 때에는 포맷팅(Formating)을 해야 한다. 포맷팅은 디스크에 파일 시스템을 탑재하고 디스크 표면을 초기화하여 사용할 수 있는 형태로 만드는 작업이다.

 

파일이 저장된 위치정보는 파일 테이블로 관리한다. 파일 테이블에는 파일 이름, 위치정보 등이 저장된다. 모든 운영체제는 고유의 파일 테이블을 갖는다. 윈도우는 FAT(File Allocation Table), 유닉스는 i-node 같은 파일 시스템을 운영하며, 저마다의 파일 테이블을 유지한다.

 

포맷팅은 파일 시스템을 초기화하는 작업으로, 빠른 포맷팅과 느린 포맷팅으로 나뉜다. 빠른 포맷팅은 데이터는 그대로 둔 채 파일 테이블을 초기화하는 방식이다. 느린 포맷팅은 파일 시스템을 초기화할 뿐 아니라 저장 장치의 모든 데이터를 0으로 만든다. 

 

4. 빈공간 관리

디지털 포렌식(Digital Forensic) 기술은 PC나 스마트폰 같은 디지털 기기에 들어 있는 데이터를 수집, 추출한 후에 이를 바탕으로 범죄 단서와 증거를 찾아내는 과학 수사 기법이다. 최근 들어 TV나 신문에서 경찰이 압수한 범죄자의 스마트폰에서 통화내역이나 문자 메시지 등을 복구하여 증거로 삼았다는 뉴스를 자주 접한다. 이러한 복원 기술이 디지털 포렌식이다. 포렌식(forensic)의 사전적 의미는 '법의학'이지만 최근에는 '범죄에 관한 과학 수사'라는 포괄적의미로 사용한다. 따라서 디지털 포렌식은 모든 디지털 기기 및 시스템 관련 범죄에 대한 과학적 수사를 의미한다.

 

디스크에 저장된 데이터들은 파일 시스템으로 관리한다고 설명했다. 디스크에 파일을 저장할 때 모든 테이블을 뒤져 빈 공간을 찾는 것은 비효율적이다. 빈 공간을 효율적으로 관리하려고 파일 시스템은 빈 블록정보만 모아 놓은 빈 공간 리스트(free block list)를 유지한다. 한 파일이 사용한 블록은 사용 이후 빈공간리스트에 추가되는데, 블록의 내용이 지워지지 않고 리스트에 추가된다는 게 핵심이다.

파일 시스템에서는 파일 테이블의 헤더를 삭제하고 사용한 블록을 빈공간리스트에 등록한 다음 이것이 파일이 삭제된 것이라 간주한다. 이는 해당 블록에 새로운 데이터를 덮어 쓰지 않는 한 데이터를 복구할 수 있다는 의미이다. 또 빈공간리스트를 보고 새로운 블록을 할당할 때는 리스트에 먼저 들어온 블록부터 할당한다. 그러므로 휴지통에서 막 삭제한 파일이나 빠른 포맷을 한 이후에 데이터를 되살릴 수 있는 것이다.

 

반응형