본문으로 건너뛰기

Welcome

· 약 5분

안녕하세요.

포스텍 컴퓨터공학과 21학번 윤수원입니다.

앞으로 나올 정리 노트들은 제가 2023년도에 박찬익 교수님의 운영체제 수업을 수강하면서 제가 생각하기에 중요한 내용들을 정리해놓은 것입니다.

여기에 나온 내용이 시험에 안 나올 수도 있고, 여기에서 다루지 않은 내용이 시험에 나올 수도 있습니다.

그 점 유념해서 읽어주시기 바랍니다.

박찬익 교수님 수업 공부 팁

기출

기출을 년도에 상관 없이 많이 풀어보시는 것을 추천드립니다.

2023년 OS 수업 기준, 2005~7년도 쯔음 기출과 상당히 유사한 문제들이 많이 출제되었습니다.

그 결과 기출을 푼 학생과 기출을 풀지 않은 학생의 평균 점수 차가 꽤 크게 벌어졌습니다.

풀 기출과 안 풀 기출 구분

기출도 가려서 풀어야합니다. 특히 다른 교수님 (성효진 교수님) 등이 출제하셨던 운영체제 기출은 박찬익 교수님의 기출과 출제 스타일이 많이 다릅니다. 용어나 개념의 설명이 아예 다른 경우도 간혹가다 있습니다. 이 점 고려해서 잘 준비하시기 바랍니다.

수업 복습

기출 다음으로 중요한 것이 수업 내용입니다.

교수님께서 중요하게 생각하시는 것은 수업 중에서도 중간 중간 강조를 하십니다.

보통 그렇게 강조를 하시는 내용은 어떠한 형태로든 시험 문제로 나오는 경우가 많습니다.

그렇기에 관련 내용을 교과서에서 찾아 예상되는 문제를 풀어보면 시험 준비가 훨씬 수월합니다.

수업 예습

솔직하게, 박찬익 교수님의 수업 방식은 대부분의 교수님들의 수업이 그렇든 항상 이해가 잘 되는 수업은 아닙니다.

심지어 중간 중간 내용을 착각하시고 번복하는 경우도 더러 있습니다.

그래서 필기가 되어있는 선배들의 노트나 이 정리 노트를 한번 읽어보시고 수업을 들어가는 것을 추천드립니다.

이 자료의 구성

이 자료는 절대적으로 박찬익 교수님의 수업에 도움이 되는 보충의 목적으로 만들어졌습니다.

따라서 이 자료에 나온 내용이 시험에 반드시 나온다는 보장은 없습니다.

이 자료만 보고 시험을 준비하는 것은 추천하지 않습니다.

하지만 시험 공부를 하면서 읽어보면 여러분들이 더 잘 이해하는데 도움이 될거라 생각합니다.

중요한 내용은 이러한 admonition 블록에서 표시됩니다.

이러한 블록은 중요한 내용을 강조하는 데 사용하니 꼭 보시는 것을 추천합니다.

It's time to take a quiz!

Test your knowledge and see what you've just learned.

간혹가다가 이렇게 퀴즈 문제들이 나올 수 있습니다.

Introduction to OS

· 약 7분

컴퓨터공학에 흥미가 있는 사람이라면 윈도우와 리눅스가 운영체제(Operating System)라는 것을 알고 있을 것이다. 조금 더 관심있는 사람이라면 운영체제의 예시로 iOS, Android, macOS를 꼽을 수도 있다. 그러나 운영체제에는 어떤 제품이 있고, 어떤 회사가 만드는지에 관심을 가지는 것과 운영체제가 무엇이며 어떻게 작동하는지 배우는 것은 아주 다른 문제이다. 이번 수업에서는 운영체제가 무엇이며 어떤 기능들을 제공하는지 알아볼 것이다.

OS란 무엇일까?

먼저 OS의 정의에 대해 알아보자.

운영체제는 컴퓨터 하드웨어와 소프트웨어 자원을 관리하는 시스템 소프트웨어이다.

그렇다면 하드웨어와 소프트웨어 자원을 관리하는 소프트웨어가 왜 필요할까? 사람들은 왜 운영체제를 만들게 되었을까? 이 질문에 답하기 전에 먼저 컴퓨터 발전의 역사에 대해 살펴보자.

History of OS

운영체제가 없었던 1950년대에는 컴퓨터가 한 번에 하나의 프로그램만 실행할 수 있었다. 당시의 컴퓨터는 매우 단순해서 저장장치에 저장된 단 하나의 프로그램을 실행하고 결과를 출력하면 종료되었다. 그러나 한 번에 하나의 프로그램만을 실행하는 컴퓨터는 매우 불편했다. 많은 사람들이 자신의 프로그램을 컴퓨터로 실행하고 싶어했고, 한 번에 전부 돌릴 수 없기 때문에 예약을 받아 순서대로 실행해주었다. 각 사람은 정해진 시간동안 컴퓨터를 사용할 권리를 얻었고, 예약자는 프로그램을 실행하기 위해 예약 시작 시간에 제때 도착해서 컴퓨터에 프로그램을 입력해주어야 했다.

결국 사람들은 사용자로부터 컴퓨터 사용 예약을 받고 관리하는 소프트웨어를 개발하기로 결심했고, 이러한 결심이 초기 운영체제의 개발을 이끌었다.

Beginning of OS & Problems

초창기의 운영체제는 프로그램 종료 시 예약된 프로그램 중 하나를 실행시켜주는 기능을 가지고 있었다. 새로운 기능 덕분에 사람들은 컴퓨터 예약시간에 맞춰 뛰어오지 않아도 괜찮게 되었다. 컴퓨터를 사용하고 싶은 사람들은 운영체제에 프로그램을 예약해두면 운영체제가 알아서 실행시켜주었다. 그러나 초기 운영체제는 여전히 한 번에 하나의 프로그램만을 실행 가능했다. 이 점에 불만을 가진 사람들이 많았는데, 실행이 매우 빨리 끝나는 작은 프로그램을 실행하기 위해서 아주 긴 시간을 기다려야 했기 때문이었다.

Cocurrency & Resource Allocation

이러한 문제를 해결하기 위해 운영체제는 프로그램들을 번갈아가며 실행하도록 진화하였다. 그리고 컴퓨터 과학자들은 하나의 컴퓨터에 여러 프로그램을 번갈아가며 실행하기 위해서는 한정된 하드웨어 자원을 여러 프로그램에 할당하는 자원 분배 문제를 풀어야 한다는 사실을 깨달았다. 컴퓨터 과학자들은 자원 분배 문제를 해결하기 위해 각 프로그램이 OS에게 자원을 요청하도록 하고, OS가 허락했을 때 자원을 사용하도록 만들었다.

결과적으로 컴퓨터 과학자들은 하나의 컴퓨터에서 효율적으로 여러 프로그램을 실행하기 위해서는 OS가 하드웨어와 소프트웨어 자원을 관리해야한다는 사실을 깨달았으며, OS를 하드웨어와 소프트웨어 자원을 관리하는 시스템 소프트웨어로 정의하였다.

Main Role of OS

운영체제의 가장 중요한 목표는 하드웨어와 소프트웨어 자원을 적절히 관리하여 하나의 컴퓨터에서 여러 프로그램을 동시에 실행하는 것이다. 이를 위해서는 각 프로그램에 컴퓨터 하드웨어 자원을 적절히 할당하여야 한다.

자원 분배의 문제를 해결하기 위해 인터럽트, 버퍼링, 멀티태스킹, 가상 메모리, 파일 시스템 등 다양한 개념이 등장하였다.

이러한 개념을 앞으로 많은 운영체제 수업을 거치면서 하나 하나 배워나갈 것이다.

Basic Hardware Supports for OS

· 약 4분

우리가 실제로 사용하는 컴퓨터에서는 운영체제를 구동하기 위해 다양한 물리적인 지원 기능이 탑재되어 있다. 그러한 하드웨어적으로 구현된 지원기능을 좀 알아보자.

OS Kernel Bootstraping

OS 커널 부트스트래핑은 컴퓨터가 처음 전원을 켰을 때 운영 체제를 메모리에 로드하고 실행하는 초기 과정이다.

이 과정은 컴퓨터가 작동할 수 있도록 기본적인 소프트웨어 환경을 설정하는 데 필수적이다.

다음은 부트스트래핑 과정의 주요 단계다:

  1. Power-On: 컴퓨터가 켜지면, CPU는 미리 정해진 메모리 주소로 점프하여 부트스트랩 코드를 실행한다. 이 코드는 일반적으로 ROM(Read-Only Memory)에 저장되어 있으며, BIOS(Basic Input/Output System)라고도 불린다.

  2. BIOS 실행: BIOS는 컴퓨터의 기본 하드웨어를 초기화하고, 디스크에서 부트로더(bootloader)를 찾는다. 부트로더는 운영 체제를 메모리에 로드하는 작은 프로그램이다.

  3. 부트로더 로드: BIOS가 부트로더를 디스크에서 찾으면, 이를 메모리로 복사하고 실행을 시작한다.

  4. OS 커널 로드: 부트로더는 디스크에서 운영 체제의 커널을 찾아 메모리로 복사한다. 이 커널은 운영 체제의 핵심 부분으로, 하드웨어를 제어하고 응용 프로그램을 실행하는 역할을 한다.

  5. 커널 실행: 커널이 메모리에 로드된 후, 부트로더는 커널에게 제어권을 넘긴다. 이제 커널이 실행을 시작하고, 전체 운영 체제가 부팅되어 사용자가 시스템을 사용할 수 있게 된다.

  6. 로그인 App 로드: 커널은 디스크에서 로그인 App을 찾아 메모리로 복사한다.

It's time to take a quiz!

Test your knowledge and see what you've just learned.

What shape do you see when using the code snippet above?