OS 22

Process Synchronization 3 & 4

Bounded-Buffer-Problem (Producer-Consumer Problem) 공유 데이터 buffer 자체 및 buffer 조작 변수 (empty / full buffer의 시작 위치) Producer (생산자) Empty 버퍼가 있는지 확인한다. (없으면 기다림) 공유 데이터에 lock을 건다. Empty 버퍼에 데이터를 입력하고 버퍼를 조작한다. lock을 푼다. Full 버퍼가 하나 증가한다. Consumer (소비자) Full 버퍼가 있는지 확인한다. (없으면 기다림) 공유 데이터에 lock을 건다. Full 버퍼에서 데이터를 꺼내고 버퍼를 조작한다. lock을 푼다. Empty 버퍼가 하나 증가한다. 발생 가능한 동기화 문제 공유 버퍼이기 때문에 생산자 여러 명이 동시에 한 버퍼에..

OS 2023.12.02

Process Synchronization 1

임계 구역 문제를 해결하기 위한 충족 조건 상호 배제 (Mutual Exclusion) 어떤 프로세스가 임계 구역 부분을 수행 중이면 다른 모든 프로세스는 그의 임계 구역에 들어가면 안 된다. 진행 (Progress) 아무도 임계 구역에 있지 않은 상태에서 임계 구역에 들어가고자 하는 프로세스가 있으면 임계 구역에 들어가게 해 주어야 한다. 유한 대기 (Bounded Waiting) 프로세스가 임계 구역에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 임계 구역에 들어가는 횟수에 한계가 있어야 한다. ex) 세 개의 프로세스가 있을 때 두 개의 프로세스만 번갈아가며 임계 구역에 들어가는 것은 유한 대기 조건을 만족하지 못한 것이다. 임계 구역 문제 해결 알고리즘 Algorithm 1..

OS 2023.11.27

CPU Scheduling 2 & Process Synchronization

멀티 레벨 큐 (Multi-Level Queue) Ready Queue를 우선 순위에 따라 여러 개로 분할한다. 빠른 응답을 필요로 하는 대화형 작업은 전위 큐에 넣는다. 전위 큐에서는 주로 라운드 로빈 스케줄링 기법을 사용한다. 계산 위주의 작업은 후위 큐에 넣는다. 후위 큐에서는 주로 FCFS 스케줄링 기법을 사용한다. 멀티 레벨 큐 자체에 대한 스케줄링이 필요하다. 고정 우선 순위 방식 (Fixed Priority Scheduling) 전위 큐에 있는 프로세스에게 우선적으로 CPU가 할당되고, 전위 큐가 비어 있는 경우에만 후위 큐에 있는 프로세스에게 CPU가 할당된다. Starvation 가능성이 존재한다. 타임 슬라이스 방식 (Time Slice) 각 큐에 CPU time을 적절한 비율로 할당한..

OS 2023.11.26

CPU Scheduling 1

CPU burst와 I/O burst CPU burst CPU 버스트는 사용자 프로그램이 CPU를 직접 가지고 빠른 명령을 수행하는 단계이다. 이 단계에서 사용자 프로그램은 CPU 내에서 일어나는 명령 (ex. Add)이나 메모리(ex. Store, Load)에 접근하는 일반 명령을 사용할 수 있다. I/O burst I/O 버스트는 커널에 의해 입출력 작업을 진행하는 비교적 느린 단계이다. 이 단계에서는 모든 입출력 명령을 특권 명령으로 규정하여 사용자 프로그램이 직접 수행할 수 없도록 하고, 대신 운영체제를 통해 서비스를 대행하도록 한다. 이처럼 사용자 프로그램이 수행되는 과정은 CPU 작업과 I/O 작업의 반복으로 구성된다. CPU bound process와 I/O bound process 각 프로..

OS 2023.11.24

Process Management 1 & 2

프로세스 생성 운영체제가 최초의 프로세스를 생성하면, 이미 존재하는 프로세스가 다른 프로세스를 복제 생성한다. 이때 기존 프로세스를 부모 프로세스라 하고, 새로 생긴 프로세스를 자식 프로세스라고 부른다. 프로세스의 트리 (계층 구조)를 형성한다. 프로세스는 자원을 필요로 한다. 운영체제에게 받는다. 부모와 공유한다. 자원의 공유 부모와 자식이 모든 자원을 공유하는 모델 일부를 공유하는 모델 전혀 공유하지 않는 모델 수행 (Execution) 부모와 자식이 공존하며 수행하는 모델 (이때는 부모와 자식이 CPU를 획득하기 위해 경쟁하는 관계가 됨) 자식이 종료(terminate)될 때까지 부모가 기다리는(wait) 모델 주소 공간 (Address space) 자식은 부모의 공간을 복사한다. (프로세스 ID를..

OS 2023.11.24

Process 2 & Process 3

Thread란 정의 프로세스 내에서 실행 되는 여러 흐름의 단위 혹은 프로세스가 할당 받은 자원을 이용하는 실행 흐름의 단위를 뜻한다. 구성 program counter register set stack space 쓰레드마다 CPU 관련 정보들을 각자 가지고 있어야 한다. Thread가 다른 Thread와 공유하는 부분 code section data section OS resources Thread끼리 Address space의 data, code 영역은 공유하되 stack은 별도로 할당 받는다. PCB에서는 program counter와 register set을 제외한 프로세스 관련 정보 및 자원을 모두 공유한다. 여기서 thread들이 공유하는 부분인 code section, data section..

OS 2023.11.23

Process 1

프로세스의 개념 프로세스는 실행 중인 프로그램이다. 프로세스의 문맥 (Context) 프로세스가 시작해서 종료할 때까지 CPU에서 명령을 한꺼번에 수행하면 좋겠지만, 여러 프로세스가 함께 수행되는 시분할 환경에서는 CPU를 자주 빼앗기고 획득하게 된다. 따라서 CPU를 다시 획득해 명령의 수행을 재개하는 시점이 되면, 이전 CPU 보유 시기에 어느 부분까지 명령을 수행했는지 정확한 상태를 재현할 필요가 있다. 이때 정확한 재현을 위해 필요한 정보가 바로 프로세스의 문맥이다. PC 레지스터가 어디를 가르키고 있는가, 함수를 호출 했다면 스택에 무슨 내용을 쌓아놓고 있는가, 변수의 값이 변경 됐으면 지금 무슨 값을 가지고 있는가 등 프로세스의 모든 상태를 담고 있는 것 프로세스의 문맥은 3가지로 나눌 수 있..

OS 2023.11.23

System Structure & Program Execution 1

컴퓨터 시스템의 구조 큰 흐름 컴퓨터 시스템의 구조는 컴퓨터 내부 장치인 CPU, 메모리와 컴퓨터 외부 장치(입출력 장치)인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구분된다. 컴퓨터는 외부 장치에서 내부 장치로 데이터를 읽어와 (input) 각종 연산을 수행한 후, 그 결과를 외부 장치로 내보내는(output) 방식으로 업무를 처리한다. 각 요소에 대한 설명 Memory 메모리는 CPU가 직접 접근할 수 있는 내부 기억 장치로서 특정 프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야 한다. Device Controller I/O Device에는 Device Controller라는 것이 붙어 있다. 컨트롤러는 일종의 작은 CPU로서, 각 하드웨어 장치를 제어하는 역할을 ..

OS 2023.11.19

Introduction to Operating Systems

운영 체제의 정의 운영 체제(operating system)란 컴퓨터 하드웨어 바로 윗 단에 설치되는 소프트웨어를 말한다. 운영 체제는 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층이다. 운영 체제 자체도 하나의 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라간다. 하지만 운영 체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할 것이다. 따라서 운영 체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려 놓고, 그렇지 않은 부분은 필요할 때 메모리로 올려서 사용하게 된다. 좁은 의미의 운영 체제 메모리에 상주하는 운영 체제의 부분을 커널(kernel)이라고 부르며 운영 체제의 핵심 부분이다. 넓은 의미의 운영 체제 커널 뿐 아니라 ..

OS 2023.09.22