컴퓨터 운영체제는 무엇을 하는가? (What Operating System Do?)
나의 마지막 학기가 시작했다. 베트남에서의 생활도 재밌었지만, 코로나라는 특수한 상황 속에서 비대면 온라인 개강이 되었고, 몇 개 안남은 컴퓨터 공학 수업을 마지막 학기에 수강하게 되었다.
그 중 첫번째 수업이 ‘운영체제’에 대한 수업이었고, 말로는 많이 들었고, 이미 내 일상을 지배할 정도로 많이 사용되지만 (컴퓨터, 스마트폰, 태블릿 PC) 정작 깊게 공부를 시작해보지는 못했던 것 같다.
이번 학기에 사용하는 교재는 ‘Operating System Concept 10th Edition’으로 운영체제 수업에 있어 바이블처럼 사용되는 것 같다.
교수님도 짧게 언급하긴 했지만, 이 교재에서는 운영체제가 무엇인지 이렇게 정의한다.
An operating system acts as an intermediary between the user of a com- puter and the computer hardware. The purpose of an operating system is to provide an environment in which a user can execute programs in a convenient and efficient manner.
요약하자면 운영체제를 사용하는 목적은 사용자에게 편리와 효율성을 제공하는 프로그램을 사용하는데 있다. 그래서 운영체제 자체가 일반적으로 사용자에게 사용 목적이 되지는 않지만, 하드웨어 기능을 끌어내 사용자가 원하는 소프트웨어 애플리케이션을 사용할 수 있게 지원하는 역할을 담당하는 듯하다.
그래서 수업 중간에 수강생의 질문으로 Layer(층)에 대한 개념이 얘기가 나왔었는데, 대략 인터넷에 있는 구조 중에 수업에 배운 내용에 충실하게 그린 Diagram이 있었다.
좀 더 직관적인 구조는 책에서 찾아 볼 수 있었다.
운영 체제 자체가 애플리케이션 — 컴퓨터 하드웨어 사이에 있는 것을 볼 수 있고, 세분화된 다이어그램에서 볼 수 있듯이 개발하는데 있어 사용하는 많은 소프트웨어들이 운영체제 부분에 속하는 것을 볼 수 있다.(Command Line, File System, I/O 등)
그리고 그 동안 종종 들었던 개념인데, 본격적으로 언급되는 몇 가지 개념들이 속속 등장했다.
- 커널 (Kernel) : 컴퓨터 과학에서 커널(kernel)은 컴퓨터의 운영 체제의 핵심이 되는 컴퓨터 프로그램의 하나로, 시스템의 모든 것을 완전히 통제한다. 운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공한다. 핵심(核心)이라고도 한다. 리눅스 커널이라는 단어를 정말 많이 들어봤었는데 이게 그 커널이었다.(출처 : 위키피디아) 커널에 의해서 작업을 수행하는 것을 System Call이 발생했다고 한다.
- 리소스 (Resource) : 컴퓨터 시스템 내의 실질적 또는 가상의 부품이나 요소. 이 리소스라는 것을 관리하는 게 사실 운영체제를 사용하는 핵심이라 볼 수 있고, 운영체제는 Resource Allocator라고도 불린다.
- 마더보드 (Motherboard) : 메인보드, 주회로 기판이라고도 불리며 전자적 장치에서 주회로가 내장된 보드라고 한다. 고등학생 때, 컴퓨터 CPU를 교체하려고 데스크탑 본체를 뜯어봤었는데 그 때 마더보드에 장착되어 있던 CPU를 교체했던 기억이 있다.
- 롬 (ROM) : 컴퓨터를 구동하기 위한 기본적인 정보가 담겨있다. 그리고 그 정보들을 기억하기 위해 다른 정보들은 기억하지 않는다. Bootstrap과 같이 나올텐데 컴퓨터 파워를 키거나 리부트할 때, 컴퓨터 시동에 필요한 기본적인 정보를 저장해놓는다. 이것은 Firmware 형태로 저장되어 있다고 한다. 일반 유저는 이 ROM에 직접 접근할 수 없다.
- 메모리(Memory, 일반적으로 RAM) : 메모리 관리가 중요하다는 말은 개발하면서 많이 들었는데, RAM의 리소스를 관리하는 방법에 대한 언급이 꽤 이뤄질 것 같다. 이번에 맥북 M1을 구매했는데, 16GB RAM으로 변경해서 유독 수업에서 잘 들렸던 것 같다.
- Bootstrap, BIOS : Bootstrap은 컴퓨터에 파워를 키거나 리부트하는 일을 의미하는데, 이 때 모든 시스템의 측면에서 초기화가 이뤄지며, Operating System Kernel을 불러오고 실행한다. 바이오스(BIOS; Basic Input/Output System)는 운영 체제 중 가장 기본적인 컴퓨터의 입출력을 처리하는 소프트웨어이다. 사용자가 컴퓨터를 켜면 시작되는 프로그램으로 주변 장치와 컴퓨터 운영 체제 사이의 데이터의 흐름을 관리한다. 펌웨어(firmware)의 한 종류이기도 하다.
- 가상화 (Virtualization) : 가상화의 대상이 되는 컴퓨팅 자원은 프로세서(CPU), 메모리(Memory), 스토리지(Storage), 네트워크(Network)를 포함하며, 이 들을 쪼개거나 합쳐서 자원을 더욱 더 효율적으로 사용할 수 있게 하고, 분산처리를 가능하게 할 수 있는 것을 의미한다. 과제를 진행할 때, 가상화를 사용해 지금 사용하고 있는 노트북에 리눅스 커널을 사용할 것으로 보인다.
오늘 강의에서는 다행스럽게도 코드 실습이 없었지만, 몇 몇 전문 용어들을 차근차근 정리할 수 있는 시간을 가질 수 있었다.
불행 중 다행이랄까… 전문 용어들이 평상시에 꽤 들어왔지만 찾아보지 않았던 개념들이었고 (ㅋㅋㅋ 궁금증이 정말 없다) 개발하면서도 사실 아직까지 본격적으로 관리하거나 사용해본 것들이 아니라서 많이 어려웠던 것 같다.
교재에 주어진 Diagram은 이렇게 생겼는데, 사실 이 다이어그램만 보면 운영체제를 처음 배우는 사람 입장에선 아무것도 모르는 게 팩트다. 그럼 이걸 어떻게 해석해야할까?
나는 아래의 이미지처럼 해석을 추가하게 되었다.
CPU와 I/O는 아주 오래전에는 함께 붙어서 작업을 수행하는 것들이었으나 비효율성 문제 때문에 둘을 독립적으로 분리시켜 사용하게 되었다.
그래서 책에서는 이것을 Concurrently (동시에) 수행한다고 표현한다.
그래서 위 다이어그램을 보면 Interrupt(Interrupt의 종류는 I/O를 포함해 다양한 종류가 있다.), I/O 요청이 들어오기 전까지 CPU는 유저 프로그램을 실행하는 것을 볼 수 있다.
그리고 I/O의 요청이 들어오면 (Read, Write 등의 예시가 있다) ISR(Interrupt Service Routine)이 발생하며, CPU에 interrupt가 발생해 기존에 수행하던 것을 잠깐 멈추고 fixed location(어떤 특정한 위치로 control이 이동한다. fixed location은 결국 interrup가 시작되는 지점을 의미하며, ISR을 지칭한다.)에 특정 작업을 실행(execution)하게 된다.
해당 작업 — 참고로 작업은 process, job, task 등의 단어로 표현이 가능하다 — 수행이 마무리되면 다시 CPU는 기존 작업하던 것에 대해 computation을 하게 되며, I/O가 없는 기간 동안에는 I/O는 Idle, 가동되지 않는 것이다.
이 루틴이 반복되는 과정이라 보면 되며, I/O 발생 후 아주 잠깐 동안 CPU가 반응하기까지 Gap이 있는데 이는 연산하는 과정에서 gap이 발생하는 것은 아니고 다이어그램에서 임의로 추가된 내용이라 하니, 무시해도 될 것 같다.
양이 방대하긴 하지만, 첫번째 수업이라 그런지 아직은 코딩 부분이 빠져 있어서 따라갈만 한 것 같다.
컴퓨터 구조, 특히 운영체제에 대한 부분을 왜 배워야할까? 아직은 이것에 대해 명확한 해답을 찾지 못했다.
웹 개발하면서 운영체제적인 문제로 에러나 트러블이 있던 것도 아니고, 알고리즘 문제를 풀면서 별도의 운영체제가 필요했던 상황을 겪었던 것도 아니다.
그러나 좀 더 고급 개발을 진행하기 위해서는 분명 운영체제는 엔지니어의 중요한 요소이고, 내가 더 고급 개발자가 되기 위한 첫걸음이라 본다.
아, 길다. 정리 해놓고 틈틈이 봐야겠다.
Ryan