inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

워밍업 클럽 CS 1주차 발자국 : 운영체제

Jay
1

운영체제 들어가기

운영체제 개요

운영체제(OS, Operating System)는 컴퓨터 하드웨어와 사용자 간의 중개자 역할을 하는 소프트웨어입니다.

컴퓨터 자원(CPU, 메모리, 디스크, 네트워크 등)을 효율적으로 관리하고, 사용자와 응용 프로그램이 하드웨어를 쉽게 사용할 수 있도록 도와주는 역할을 합니다. 운영체제는 여러 작업을 동시에 처리할 수 있도록 프로세스를 관리하고, 파일 시스템, 네트워크 통신, 보안 등을 담당하며, 하드웨어 장치와 소프트웨어 간의 인터페이스 역할도 합니다.

운영체제가 하는 주요 기능:

1. 프로세스 관리: 실행 중인 프로그램(프로세스)을 관리하고, 여러 프로세스가 동시에 실행될 수 있도록 스케줄링과 자원 배분을 조절.

2. 메모리 관리: 실행 중인 프로그램들이 메모리를 효율적으로 사용하도록 조정하고, 메모리 간 충돌을 방지.

3. 하드웨어 관리: CPU, 메모리, 디스크, 입출력 장치 등의 하드웨어 자원을 관리하고, 응용 프로그램이 이 자원에 접근할 수 있도록 인터페이스를 제공.

4. 파일 시스템 관리: 데이터를 파일 단위로 저장하고, 사용자가 이를 읽고 쓸 수 있도록 파일 관리 시스템을 제공.

5. 보안 및 접근 제어: 시스템 자원에 대한 접근을 제어하고, 권한을 부여해 사용자의 보안을 유지.

운영체제는 다양한 하드웨어를 제어하며 컴퓨터 시스템의 효율성과 안정성을 보장하는 중요한 소프트웨어입니다. 대표적인 운영체제에는 윈도우(Windows), 리눅스(Linux), 맥OS(macOS) 등이 있습니다.

 

운영체제 역사

운영체제는 애니악 같은 초기 컴퓨터부터 발전해 왔습니다. 초기에는 입출력 작업과 같은 기본 기능만 수행했지만, 시분할 시스템의 도입으로 멀티프로그래밍과 다중 사용자 환경이 가능해졌고, 이 시기에 유닉스가 탄생했습니다. 이후, 개인용 컴퓨터가 상용화되면서 현대의 운영체제가 발전했습니다.

운영체제는 CPU 사용률을 높이고 비용을 절감하려는 노력에서 시작되었습니다.

 

운영체제의 구조

운영체제의 구조는 커널, 사용자 인터페이스, 하드웨어와의 상호작용으로 나눌 수 있습니다.

  1. 커널(Kernel): 운영체제의 핵심으로, 프로세스, 메모리, 저장장치를 관리합니다. 커널은 사용자가 직접 접근할 수 없으며, 커널이 사용자로부터 자신을 보호하기 위한 인터페이스인 시스템 콜을 통해 응용 프로그램과 소통합니다.

  2. 사용자 인터페이스: 사용자와 커널 간의 상호작용을 위해 GUI(그래픽 사용자 인터페이스)나 CLI(명령 줄 인터페이스)를 제공합니다. 사용자는 시스템 콜을 통해 커널의 기능을 요청합니다.

  3. 하드웨어와의 상호작용: 커널은 디바이스 드라이버를 사용하여 하드웨어를 제어합니다. 드라이버는 하드웨어와 커널 간의 통신을 담당하며, 기본적인 드라이버는 커널에 포함되지만 복잡한 장치는 제조사에서 제공하는 드라이버를 설치해야 합니다.

 

컴퓨터 하드웨어와 구조

오늘날의 대부분의 컴퓨터는 프로그램 내장 방식의 폰 노이만 구조를 따릅니다. 과거의 애니악 같은 컴퓨터는 하드웨어로 프로그램을 구성해야 했으며, 프로그램 변경 시마다 스위치와 배선을 재조정하는 불편함이 있었습니다.

폰 노이만 구조의 주요 요소:

메인보드:

CPU는 크게 산술논리 연산장치(ALU), 제어장치(Control Unit), 레지스터(Register)로 나눌 수 있습니다:

메모리는 크게 RAMROM으로 구분되며, 각각의 특징은 다음과 같습니다:

  1. RAM (Random Access Memory):

    • 저장된 위치와 관계없이 읽는 속도가 일정합니다.

    • 휘발성 메모리로, 전원이 꺼지면 데이터가 사라집니다.

    • 주로 메인 메모리로 사용되어, 현재 실행 중인 프로그램과 데이터를 임시로 저장합니다.

  2. ROM (Read Only Memory):

    • 비휘발성 메모리로, 전원이 꺼져도 데이터가 유지됩니다.

    • 데이터가 한 번 쓰이면 수정할 수 없습니다.

    • 주로 컴퓨터 부팅과 관련된 BIOS를 저장하는 데 사용됩니다.

 

컴퓨터 부팅 과정

  1. 전원 공급: 컴퓨터 전원이 켜지면 하드웨어에 전력이 공급되고, 프로세서가 초기화되면서 부팅이 시작됩니다.

  2. BIOS 실행: 컴퓨터의 메인보드에 내장된 ROM(Read-Only Memory)에 저장된 BIOS(Basic Input/Output System)가 실행됩니다. BIOS는 컴퓨터의 기본적인 입출력 기능을 담당하며, 부팅 초기 단계에서 중요한 역할을 합니다.

  3. POST(전원 켠 후 자가 테스트): BIOS는 POST(Power-On Self Test)를 수행하여 CPU, 메모리, 키보드, 마우스, 그래픽 카드, 하드디스크 등 주요 하드웨어 장치가 정상적으로 작동하는지 확인합니다. 문제가 있으면 오류음을 내거나 화면에 오류 메시지를 표시하고, 부팅이 중단됩니다.

  4. 부트로더 로드: 하드웨어 점검이 완료되면, BIOS는 저장 장치(주로 하드디스크 또는 SSD)에서 MBR(Master Boot Record)을 찾아 실행합니다. MBR에는 컴퓨터의 첫 번째 부팅 섹터와 부트로더가 저장되어 있습니다.

  5. 부트로더 실행: MBR에서 불러온 부트로더는 설치된 운영체제들을 확인하고, 사용자가 부팅할 운영체제를 선택할 수 있도록 합니다. 예를 들어, 컴퓨터에 윈도우와 리눅스가 함께 설치되어 있으면 운영체제 선택 화면이 표시됩니다.

  6. 운영체제 로드: 사용자가 운영체제를 선택하거나 기본 운영체제가 하나만 있으면, 선택된 운영체제가 하드디스크에서 메모리로 로드됩니다. 이때 운영체제의 커널이 메모리에 올라가며, 운영체제가 컴퓨터를 제어하기 시작합니다.

  7. 바탕화면 표시: 운영체제가 성공적으로 로드되면, 모니터에 바탕화면이 표시되고, 사용자 인터페이스(UI)가 준비됩니다. 이 시점부터는 사용자가 응용 프로그램을 실행하고, 운영체제가 이를 관리하게 됩니다.

     

 

인터럽트

인터럽트는 CPU가 입출력 장치와 상호작용할 때 발생하는 중요한 개념입니다.

1. 입출력 작업 시작: CPU가 입출력 작업이 들어오면 입출력 관리자에게 명령을 내립니다.

2. 폴링 방식

3. 인터럽트의 도입


프로세스와 스레드

프로그램과 프로세스

프로그램:

프로세스:

 

프로세스 생성 과정 (C 언어의 경우)

  1. 전처리: 전처리기를 통해 매크로를 치환하고 필요한 파일을 포함함. 이때 파일의 확장자는 .i가 됨.

  2. 컴파일:

    컴파일러가 C 언어를 저수준 어셈블리어로 변환함. 파일 확장자는 .s가 됨.

  3. 어셈블리:

    어셈블러가 어셈블리어를 기계어로 변환함. 결과 파일의 확장자는 .o가 됨.

  4. 링킹:

    링커가 여러 라이브러리 및 다른 소스코드를 연결하여 최종 실행 파일을 생성함. 확장자는 .exe가 됨.

  5. 프로세스 생성:

    생성된 실행 파일을 더블 클릭하면 하드디스크에 있는 파일이 메모리에 올라가 프로세스가 형성되며 운영체제에 의해 관리됨.

     

 

CPU 관점에서의 프로세스 실행

 

멀티프로그래밍과 멀티프로세싱

메모리 관점 :

CPU 관점 :

 

오늘날의 운영체제는 멀티프로그래밍과 멀티프로세싱 두 가지 방식을 공존하여 사용합니다.

과거에는 메모리의 크기가 작아 멀티프로그래밍이 불가능하여 유니프로그래밍과 멀티프로세싱을 사용했습니다.

 

스와핑 : 메모리에 있는 데이터를 다른 저장장치로 보내고, 다른 저장장치에서 있는 데이터를 메모리에 올리는 과정을 말합니다. 이로 인해 메모리의 활용성을 극대화할 수 있습니다.

 

PCB : Process Control Block

운영체제는 여러 개의 프로세스를 효율적으로 관리하고 공평하게 실행해야 합니다. 프로세스가 생성되면, 운영체제는 해당 프로세스의 정보를 포함하는 PCB(프로세스 제어 블록)를 생성하고 저장합니다. 이 PCB들은 연결 리스트라는 자료구조로 저장되어 운영체제에서 관리됩니다. 프로세스가 종료되면, 연결 리스트에서 해당 프로세스의 PCB가 제거됩니다.

image

 

프로세스 상태

image

프로세스는 시분할 처리를 위한 다음과 같은 5가지 상태를 갖습니다:

  1. 생성 (New):

    PCB(프로세스 제어 블록)가 생성되고, 메모리에 프로그램을 적재하기 위한 요청이 이루어지는 상태입니다.

  2. 준비 (Ready):

    • CPU 사용을 기다리는 상태입니다.

    • 준비 상태에 있는 프로세스는 배분된 CPU 스케줄러에 의해 CPU가 할당됩니다.

    • 대부분의 프로세스는 이 준비 상태에 있습니다.

  3. 대기 (Waiting):

    • 프로세스가 입출력 요청을 할 때, 해당 요청이 완료될 때까지 기다리는 상태입니다.

    • CPU는 매우 빠른 반면, 입출력 작업은 상대적으로 느리기 때문에, 특정 프로세스가 입출력 요청을 하면 CPU가 그 프로세스를 기다리게 하는 것은 비효율적입니다.

      따라서, 입출력 요청을 한 프로세스는 대기 상태로 전환되고, 다른 프로세스에게 CPU를 할당합니다.

    • 입출력 작업이 완료되면 대기 상태에 있던 프로세스에게 CPU 할당 기회를 줍니다.

  4. 실행 (Running):

    • 준비 상태에 있는 프로세스가 CPU 스케줄러에 의해 CPU를 할당받아 실행되는 상태입니다.

    • CPU가 하나인 경우 실행 상태의 프로세스는 최대 1개만 존재합니다.

    • 실행 상태에 있는 프로세스도 CPU를 무한정 사용할 수 없으며, 부여된 시간만큼 사용합니다.

    • CPU 스케줄러는 부여된 시간을 초과하면 할당된 CPU를 강제로 뺏고 프로세스는 다시 준비 상태로 전환됩니다.

  5. 완료 (Terminated):

    • 프로세스가 종료된 상태입니다.

    • 프로세스가 사용했던 데이터는 메모리에서 제거되고, 생성된 PCB도 제거됩니다.

 

프로세스 A, B, C가 동시에 실행될 때의 동작 과정:

  1. 프로세스 로드:

    • 사용자의 입력에 의해 운영체제는 A, B, C 프로그램을 메모리에 로드합니다.

    • 이 과정에서 각 프로그램에 대한 프로세스 제어 블록(PCB)도 생성됩니다.

  2. CPU 할당:

    운영체제는 스케줄러에 의해 A 프로세스에 CPU를 할당합니다.

  3. 명령어 주소 지정:

    운영체제는 PCB에서 A 프로세스의 정보를 가져와 CPU의 프로그램 카운터에 실행될 명령어의 주소를 지정합니다.

  4. A 명령어 실행:

    CPU는 메모리에서 A 프로세스의 동작에 필요한 명령어를 가져오고, 연산을 수행합니다.

  5. 컨텍스트 스위칭 (A → B):

    스케줄러에 의해 A 프로세스에서 B 프로세스로 컨텍스트 스위칭이 발생합니다.

  6. PCB 업데이트:

    운영체제는 PCB에서 A 프로세스의 정보를 업데이트합니다. (프로그램 카운터 값도 저장)

  7. B 프로세스 정보 로드:

    운영체제는 PCB에서 B 프로세스의 정보를 가져와 CPU의 프로그램 카운터에 실행될 명령어의 주소를 지정합니다.

  8. B 명령어 실행:

    CPU는 메모리에서 B 프로세스의 동작에 필요한 명령어를 가져오고, 연산을 수행합니다.

  9. 컨텍스트 스위칭 (B → C):

    스케줄러에 의해 B 프로세스에서 C 프로세스로 컨텍스트 스위칭이 발생합니다.

  10. 반복:

    위의 과정이 반복되면서 A, B, C 프로세스가 CPU를 공유하며 실행됩니다.

이러한 방식으로 운영체제는 여러 프로세스의 CPU 자원을 효율적으로 관리하며, 각 프로세스의 PCB를 통해 실행 상태와 정보를 추적합니다. 컨텍스트 스위칭을 통해 CPU는 각 프로세스를 빠르게 교대로 실행하여 사용자에게 다중 작업을 수행하는 것처럼 보이게 합니다.

 

컨텍스트 스위칭 Context Switching

CPU가 하나의 프로세스를 실행하다가 다른 프로세스를 실행하기 위해 현재 실행 중인 프로세스의 상태를 저장하고, 다음 프로세스의 상태로 교체하는 작업입니다.

이 과정에서 프로세스의 제어를 원활하게 유지하기 위해 프로세스 제어 블록(PCB)의 내용(프로세스 상태, 다음 실행할 명령어의 주소를 담고 있는 프로그램 카운터, 각종 레지스터 값, 메모리 관련 정보)이 변경됩니다.

 

컨텍스트 스위칭 과정

  1. CPU 점유 시간 초과:

    프로세스 A가 CPU를 사용하는 동안 할당된 점유 시간을 초과합니다.

  2. 인터럽트 발생:

    운영체제는 프로세스 A가 CPU를 너무 오랫동안 사용했다고 판단하고 인터럽트를 발생시킵니다.

  3. 상태 저장:

    프로세스 A는 현재 실행 중인 작업을 중지하고, 현재 CPU의 레지스터 값과 상태를 PCB A에 저장합니다.

  4. 프로세스 B 상태 설정:

    • PCB B를 참조하여 이전 프로세스 B의 상태로 CPU의 레지스터 값을 설정합니다.

    • PCB B에는 다음에 실행할 명령어의 주소를 포함하는 프로그램 카운터가 저장되어 있습니다.

  5. 프로세스 B 실행:

    CPU는 프로세스 B의 명령어를 실행할 준비가 완료되며, 즉시 실행을 시작할 수 있습니다.

  6. 다시 인터럽트 발생:

    프로세스 B가 점유 시간을 다 사용하면, 운영체제는 또 다시 인터럽트를 발생시킵니다.

  7. 상태 저장 및 교체:

    프로세스 B의 상태를 PCB B에 저장하고, PCB A에서 프로세스 A의 상태를 가져와 다시 프로세스 A를 실행합니다.

 

컨텍스트 스위칭 발생 이유

컨텍스트 스위칭이 발생하는 이유는 여러 가지가 있습니다:

 

스와핑 (Swapping) vs 컨텍스트 스위칭 (Context Switching)

스와핑과 컨텍스트 스위칭은 모두 운영체제가 프로세스를 효율적으로 관리하기 위한 기법이지만, 사용되는 상황과 방법이 다릅니다. 스와핑은 주로 메모리 관리와 관련되어 있으며, 컨텍스트 스위칭은 CPU 자원의 효율적 분배와 관련되어 있습니다.

스와핑 (Swapping)

컨텍스트 스위칭 (Context Switching)

주요 차이점

image

 

프로세스의 생성과 종료

프로세스 생성 과정:

1. 사용자 실행: 사용자가 .exe 파일을 더블 클릭하여 프로그램을 실행합니다.

2. 메모리 로드: 운영체제가 해당 프로그램의 코드 영역과 데이터 영역을 메모리에 로드하고, 빈 스택과 빈 힙을 생성하여 공간을 확보합니다.

3. PCB 생성: 이 프로세스를 관리하기 위한 프로세스 제어 블록(PCB)을 만들어 초기화합니다.

위의 프로세스 생성 과정은 운영체제가 부팅되고 0번 프로세스가 생성될 때 딱 한 번만 실행합니다.

0번 프로세스와 자식 프로세스:

exec() 함수 사용:

프로세스 종료:

좀비 프로세스:

 

스레드

운영체제의 작업 처리 단위: 프로세스

프로세스의 한계

스레드의 도입

스레드 관리

 

장단점 비교:

스레드는 프로세스에 비해 메모리 사용이 효율적이고 실행 속도가 빠르며, 적은 오버헤드를 통해 작업을 수행할 수 있는 장점이 있지만, 안정성 측면에서는 프로세스에 비해 취약한 단점을 가집니다.

 


CPU 스케줄링

CPU 스케줄링 개요

프로그램을 실행시키면 메모리에 프로세스가 생성되고 각 프로세스에는 1개 이상의 스레드가 있습니다. 프로세스들은 CPU를 차지하기 위해 운영체제의 명령을 기다리고 있습니다.

운영체제는 모든 프로세스에 대해 CPU를 할당하고 해제하는 역할을 수행합니다. 이 과정을 CPU 스케줄링이라고 합니다.

 

스케줄링 고려 사항

 

CPU Burst와 I/O Burst

 

다중큐

프로세스 상태

1. 생성: 프로세스가 생성되면 준비 상태로 전환됩니다.

2. 준비 상태: CPU를 기다리고 있는 프로세스들은 CPU 스케줄러에 의해 실행 상태로 전환됩니다.

3. 실행 상태: CPU를 할당받은 프로세스는 CPU 사용 시간이 끝나면 다시 준비 상태로 돌아갑니다.

- 입출력 요청: 프로세스가 입출력 요청을 하면 대기 상태로 전환됩니다.

- 작업 완료: 프로세스 작업이 끝나면 완료 상태로 전환됩니다.

 

큐와 프로세스 관리

 

프로세스 우선순위와 큐

 

CPU 스케줄러

 

입출력 작업 관리

 

스케줄링 목표

 

상반되는 목표

시스템에 따른 목표 설정

 

스케줄링 알고리즘

FIFO : First In First Out

 

장점

단점

 

사용 사례

 

성능 평가


 

SJF, RR, MLFQ는 다음 주차에서..

 

 

 

 

 

 

 

 

CS 운영체제

답변 0