[인프런 워밍업 클럽 CS 2기] 1주차 발자국 - 운영체제
[ Section 1. 운영체제 들어가기 ]
1. 운영체제 개요
운영체제가 사용되는 곳
개인용 컴퓨터 :
Windows, Mac OS
스마트폰, 태블릿 :
안드로이드, iOS
네비게이션, 스마트 워치, 냉장고, 세탁기 :
임베디드 시스템
컴퓨터는 운영체제 없이 동작 가능할까?
→ 가능하다. 그러나 운영체제가 없는 경우 기본적으로 세팅된 기능만 사용 가능하며 추가적인 기능을 사용할 수 없다.
예시) ☎ : 전화기는 기본으로 제공되는 기능만 사용가능 📱 : 스마트폰은 운영체제가 내장되어 다양한 기능들을 추가적으로 사용할 수 있음
운영체제가 하는 일
프로세스 관리, 메모리 관리, 하드웨어 관리, 파일 시스템 관리
3. 운영체제의 구조
커널
프로세스, 메모리, 저장장치를 관리하는 운영체제의 핵심 기능
사용자와 커널간의 인터페이스
시스템 콜
→ 시스템 콜은 사용자와 커널 간의 상호작용을 보호하기 위한 인터페이스이며, 사용자와 애플리케이션은 시스템 콜을 통해 커널과 소통한다.
GUI/CLI 방식
GUI (Graphical User Interface): Windows, Mac OS와 같이 그래픽 기반의 사용자 인터페이스를 제공한다.
CLI (Command Line Interface): 텍스트를 사용하여 커널에 접근하며, 주로 Linux/Unix 시스템에서 사용한다.
하드웨어와 커널의 인터페이스
하드웨어와 커널의 인터페이스
드라이버
→ 드라이버는 하드웨어와 커널 간의 상호작용을 위한 인터페이스이다.
4. 컴퓨터 하드웨어와 구조
폰 노이만 구조
CPU와 메모리를 두고 그 사이를 *버스로 연결한 구조임.
버스 : 데이터를 전달하는 통로
프로그램 내장 방식을 사용함.
프로그램 내장 방식
폰 노이만 구조의 핵심 개념으로, 프로그램 명령어와 데이터를 메모리에 함께 저장하는 방식임.
CPU(Central Processing Unit) 구성장치
(1) 산술논리 연산장치 : CPU에서 실제로 데이터 연산 담당
(2) 제어장치 : 모든 장치들의 동작을 지시하고 제어
(3) 레지스터 : CPU내에서 계산을 위해 임시로 값을 보관하는 장치 → 변수와 같은 기능
메모리 종류
RAM (Random Access Memory)
랜덤으로 데이터를 읽어도 데이터 저장 위치와 상관없이 읽는 속도가 같다.
전력이 끊기면 데이터 휘발됨
메인 메모리로 사용됨
ROM (Read Only Memory)
전력이 끊겨도 데이터를 보관할 수 있으나 데이터를 한번 쓰면 수정이 불가능 함.
컴퓨터의 부팅과 관련된 바이오스를 저장하는데 주로 사용됨
5. 컴퓨터의 부팅과정
컴퓨터의 전원을 누른 경우 ROM에 저장된 바이오스가 실행됨
(1) 바이오스가 주요 하드웨어에 이상이 없는지 확인
a. 이상이 있는 경우 오류음을 내며 부팅이 이루어 지지 않음
b. 이상이 없는 경우 마스터 부트 레코드에 저장된 부트로더를 메모리로 가져와서 실행함
(2) 부트로더 실행
a. 운영체제가 여러개인 경우 실행할 운영체제 선택
b. a.에서 운영체제를 선택했거나 운영체제가 하나인 경우 운영체제를 메모리로 불러옴
(3) 운영체제 실행
운영체제 실행 이후 실행되는 모든 응용 프로그램은 메모리에 올라와서 실행되며 운영체제가 관리함
6. 인터럽트
폴링방식
CPU가 입출력 관리자에게 입출력 명령을 내린 후 입출력 명령 완료 여부를 주기적으로 확인하는 방식
주기적으로 CPU가 확인해줘야 하니 CPU 성능이 좋지 않음
인터럽트
폴링방식의 문제점 해결
CPU가 입출력 관리자에게 입출력 명령을 내린 후 다른 작업을 진행한다. 입출력 관리자는 입출력이 완료되면 CPU에게 신호를 주고 CPU는 그 신호를 받아 *인터럽트 서비스 루틴(ISR)을 실행시켜 작업을 완료한다.
*인터럽트 서비스 루틴(ISR) : 특정 인터럽트가 들어오면 그 인터럽트를 처리하는 함수
비동기적으로 동작하기 때문에 성능에 이점이 있다.
인터럽트 방식
하드웨어 인터럽트
소프트웨어 인터럽트
[ Section 2. 프로세스와 쓰레드 ]
1. 프로그램과 프로세스
프로그램(Program)이란?
저장장치에 저장된 명령문의 집합체,
애플리케이션, 앱이라고도 불림.
컴퓨터 관점에서 저장장치만 사용하는 수동적 존재
프로세스(Process)란?
저장장치에 저장된 프로그램이 메모리에 올라갔을 때 프로그램이 실행되며, 프로세스라고 불림.
메모리/CPU 사용, 입/출력 작업을 진행므로 컴퓨터 관점에서 능동적인 존재
프로세스의 구조
1) Code 영역, 2) Data 영역, 3) Stack 영역, 4) Heap 영역
2. 멀티프로그래밍과 멀티프로세싱
유니 프로그래밍(Uniprogramming)
하나의 프로그램만 메모리에 적재하여 실행하는 방식
한 번에 하나의 프로세스만 실행되는 가장 기본적인 운영 체제 방식
멀티 프로그래밍(Multiprogramming)
여러 프로그램을 메모리에 동시에 적재하여 실행하는 방식이며, 단일 CPU에서 여러 프로세스를 번갈아가며 실행한다.
CPU가 한 프로세스의 작업을 처리하는 동안 다른 프로세스의 작업을 기다리는 형태로 작업을 스위칭하고, 이를 반복하여 여러 프로세스를 병렬적으로 실행하는 방식
멀티 프로그래밍은 CPU의 활용도를 높이기 위해 여러 프로세스를 메모리에 적재하고, CPU가 유휴 상태에 있지 않도록 대기 상태에 있는 프로세스를 실행한다.
멀티 프로세싱(Multiprocessing)
멀티 프로세싱은 물리적으로 여러 개의 CPU를 사용하여 동시에 여러 프로세스를 실행하는 방식
여러 개의 CPU가 병렬적으로 동작하여 프로세스를 동시에 처리할 수 있다.
프로세스 간의 작업 분담: 각 CPU는 특정 프로세스를 처리하여 작업을 나누어 수행한다.
프로세스 간 통신: 프로세스 간의 데이터 공유 및 통신을 통해 협력하여 작업을 수행한다.
멀티 프로세싱 방식을 통해 단일 CPU 처리에 비해 더 높은 성능과 처리량을 기대할 수 있다.
시분할 처리
멀티프로그래밍의 한 형태로, 하나의 CPU가 여러 프로세스를 번갈아가며 실행하는 것
3. PCB (Process Control Block)
PCB
프로세스 생성시 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장함.
PCB들은 연결리스트라는 자료구조로 저장되며, 프로세스 종료시 운영체제는 연결리스트에서 해당 프로세스의 PCB를 제거함. 이때 연결리스트 구조는 유지
PCB의 구조
포인터, 프로세스 상태, 프로세스 ID, 프로그램 카운터, 레지스터 정보, 메모리 관련 정보, CPU 스케줄링 정보
4. 프로세스 상태
프로세스는 시분할 시스템을 처리하기 위한 다섯가지 상태를 가지고 있다.
1) 생성 (New)
PCB를 생성하고 메모리에 프로그램 적재를 요청해둔 상태
2) 준비 (Ready)
프로세스가 메모리에 적재되었고, CPU 할당을 기다리는 상태
준비상태의 프로세스는 CPU 스케줄러에 의해 CPU가 할당된다.
대부분의 프로세스는 준비상태이다.
3) 실행 (Running)
준비상태의 프로세스가 CPU스케줄러에 의해 CPU를 할당받아 실행되는 상태
실행상태에 있는 프로세스의 수는 CPU의 개수만큼이다. (CPU가 1개이면 실행상태의 프로세스는 최대 1개)
CPU스케줄러는 부여된 시간을 초과하면 할당된 CPU를 강제로 빼앗고 프로세스는 준비상태로 되돌아간다.
4) 대기 (Waiting)
입출력 작업에서 입출력이 완료될 때 까지 기다리는 상태
프로세스 실행상태에서 입출력 작업이 필요한 경우 프로세스를 대기상태로 전환하고 다른 프로세스에게 CPU를 할당한다. 이후 입출력 작업이 완료되면 대기상태인 프로세스에게 CPU 할당 기회를 준다.
5) 완료 (Terminated)
프로세스가 종료된 상태
프로세스가 사용했던 데이터를 메모리에서 제거하고 생성된 PCB도 제거한다.
5. 컨텍스트 스위칭
컨텍스트 스위칭 (Context Switching)
프로세스 실행 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 새 프로세스의 상태로 전환하는 작업
컨텍스트 스위칭 과정에서 PCB에 각 프로세스의 상태가 기록되며, CPU는 해당 정보로 다시 설정됨
컨텍스트 스위칭 발생 이유
CPU 점유시간 초과시
I/O 요청이 있는 경우
다른종류의 인터럽트 발생시
6. 프로세스 생성과 종료
프로세스 생성 과정
.exe 파일 실행시
운영체제가 코드영역과 데이터 영역을 메모리에 로드 +
빈 스택과 빈 힙을 만들어 공간 확보
프로세스 관리를 위한 PCB를 만들어서 값을 초기화 해준다.
1 ~ 3의 과정은 운영체제가 부팅되고 0번 프로세스 생성시 최초 1번 실행된다.
이후 생성되는 프로세스는 0번 프로세스를 복사하여 사용한다. → 새로 생성하는것보다 복사가 빠름
fork()
함수 사용하여 프로세스를 복사하고exce()
함수를 실행하여 복사한 부모 프로세스의 코드 영역과 데이터 영역을 자식 프로세스가 원하는 값으로 덮어씀
프로세스 종료
자식 프로세스는
exit()
함수를 사용하여 부모 프로세스에게 정상 종료를 알림부모 프로세스는 자식 프로세스의 Exit Status를 읽고 자식 프로세스를 정리한다. (Exit Status=0인 경우 정상종료)
좀비 프로세스
자식 프로세스 보다 부모 프로세스가 먼저 종료되거나 자식 프로세스가 비정상적으로 종료되어 메모리에 계속 살아있는 상태
컴퓨터를 재부팅하면 메모리가 초기화 되어 좀비 프로세스가 사라짐
7. 쓰레드 (Thread)
프로세스의 문제점
운영체제는 프로세스 단위로 작업을 처리하며, 각 프로세스는 독립됩 메모리 공간(코드, 데이터, 힙, 스택)을 사용한다.
하지만 여러 프로세스가 실행될수록 다음과 같은 단점들이 발생한다.
컨텍스트 스위칭 오버헤드 :
프로세스 간 전환 시 많은 시간이 소요
메모리 공간 분리 :
프로세스 간 메모리를 공유하지 않기 때문에, 데이터를 주고받으려면 복잡한 통신 방식(IPC, Inter-Process Communication)필요, 통신의 비용이 상대적으로 많이 들며 성능 저하 발생.
자원의 비효율적 사용 :
동일한 프로그램을 여러 프로세스로 실행 시, 각 프로세스가 중복된 자원을 사용하여 메모리 낭비발생.
쓰레드 (Thread)
프로세스의 단점을 보완하기 위해 등장
하나의 프로세스 내에서 실행되는 단위이며, 1개 이상의 쓰레드가 존재할 수 있음
메모리 공유
쓰레드는 코드, 데이터, 힙 영역을 공유하며, 스택은 각 쓰레드마다 별도로 가진다.
작업 효율
프로세스 단위가 아닌 쓰레드 단위로 작업이 이루어지며, 컨텍스트 스위칭 비용이 줄어들고, 쓰레드 간 통신이 빠르고 간단하다.
관리 구조
쓰레드마다 ID가 부여되고, 쓰레드를 관리하기 위한 TCB(Thread Control Block)가 존재한다.
프로세스와 쓰레드의 장단점
쓰레드는 효율적인 자원 사용과 빠른 통신을 가능하게 하지만, 안정성 면에서는 프로세스 방식이 더 유리하다.
안정성
프로세스는 서로 독립적, 하나의 프로세스에 문제가 생겨도 다른 프로세스에는 영향을 주지 않음
쓰레드는 하나의 프로세스 내에서 동작, 프로세스에 문제가 생기면 모든 쓰레드에 영향을 미침.
성능
프로세스는 메모리를 독립적으로 사용, IPC 통신으로 인해 오버헤드가 크고 속도가 느림.
쓰레드는 메모리를 공유하고, 스택을 제외한 자원을 함께 사용하므로 오버헤드가 작고 빠름. 그러나 공유된 자원에서 경쟁 상태나 충돌 문제가 발생할 수 있음.
[ Section 3. CPU스케줄링 ]
1. CPU 스케줄링 개요
CPU 스케줄링
운영체제가 모든 프로세스에게 CPU를 할당/해제 하는 것
CPU Burst 와 I/O Burst
CPU Burst (연산)
컴퓨터가 연산하는 시간
I/O Burst (입출력 작업)
컴퓨터가 입출력을 기다리거나 처리하는 시간
2. 다중큐
프로세스 상태에서 준비(Ready)상태와 대기(Waiting)상태의 프로세스는 큐(Queue)라는 자료구조로 관리된다.
큐(Queue) 자료구조
선입선출(FIFO) 방식으로 작동하며, 작업이 들어온 순서대로 처리되는 자료구조
먼저 들어온 작업이 먼저 처리되고 나중에 들어온 작업은 나중에 처리됨
3. 스케줄링 목표
1) 리소스 사용률
2) 오버헤드 최소화
3) 공평성
4) 처리량
5) 대기시간
6) 응답시간
4. FIFO (First In First Out) 알고리즘
FIFO (First In First Out)
먼저 들어온 작업이 먼저 처리됨.
CPU 스케줄링의 입장에서 스케줄링 큐에 들어온 순서대로 CPU를 할당받아 처리하는 방식임.
FIFO 알고리즘의 단점
먼저 들어온 프로세스가 끝나야만 다음 프로세스가 실행될 수 있다.
실행시간이 짧고 늦게 도착한 프로세스가 실행시간이 길고 빨리 도착한 프로세스의 작업을 기다려야 한다.
I/O 작업이 있는 경우 I/O 작업이 끝날때 까지 CPU 가 쉬게 되므로 CPU 사용률이 떨어짐.
평균 대기 시간
프로세스 여러개가 실행될 때, 이 프로세스들 모두가 실행되기까지 대기시간의 평균을 말함.
스케줄링의 성능은 평균 대기 시간으로 평가함
FIFO 알고리즘은 프로세스의 Burst Time에 따라 성능의 차이가 심하게 나기 때문에 현대 운영체제에서 잘 쓰이지 않고 일괄처리 시스템에 쓰임.
댓글을 작성해보세요.