본문 바로가기

대딩192

동기화_Race condition, Synchronization Synchronization Problem(Critical Section Problem) 일반적으로, 여러 프로세스(쓰레드)는 데이터를 공유하여 사용합니다. 이 때, 여러 프로세스(쓰레드)가 공유 자원에 동시에 접근하게 된다면 비의도적으로 공유 자원의 값이 변경되거나 오염될 수 있습니다. 이러한 상황을 Race condition이라고 하는데, 두 예시를 통해 해당 상황을 자세히 설명해보겠습니다. 공용 계좌에서의 인출 사람 A와 B가 잔액이 100만원인 공용 계좌를 가지고 있고, 각각 10만원씩 인출하려고 합니다. 계좌에서 특정 금액을 인출하는 과정은 다음과 같습니다. void withdraw(account, amount) { balance = get_balance(account); //계좌 잔액 불러오기.. 2022. 6. 14.
스케줄링_Real-Time Scheduling Real Time System Real Time System은 주로 임베디드 장치 안에서 주기적으로 반복되는 작업을 처리할 때 사용됩니다. Real Time System의 3요소는 Running time(t), Deadline(d), Period(p)이며, Deadline을 꼭 지켜야 하는지 여부에 따라 다음과 같이 구분할 수 있습니다. 1) Hard real-time system: Deadline을 꼭 지켜야 하는 real-time system 2) Soft real-time system: Deadline을 지키지 않아도 치명적이지 않은 real-time system 그렇다면, 주기적으로 반복되는 프로세스를 스케줄링 하는 알고리즘들을 알아봅시다. Static Priority Scheduling(Rate.. 2022. 6. 13.
스케줄링_Multilevel (Feedback) Queue Scheduling Combining Algorithms 일반적으로, 현 운영체제에서는 FCFS, SJF, Round Robin과 같은 여러가지 스케줄링 알고리즘을 결합하여 사용합니다. Multilevel Queue Scheduling과 Multilevel Feedback Queue Scheduling은 여러개의 ready queue를 두어 각 queue마다 다른 스케줄링 알고리즘을 적용하는 방식입니다. Multilevel Queue Scheduling 프로세스의 목적과 특성에 따른 여러개의 ready queue를 두어 각 queue마다 다른 스케줄링 알고리즘을 적용합니다. 그렇다면, 각 ready queue 는 어떻게 스케줄링 되어야 할까요? 일반적으로, 각 ready queue는 우선순위 알고리즘에 따라 스케줄링 된다고.. 2022. 6. 13.
스케줄링 알고리즘_Round Robin(RR) Round Robin(RR) Algorithm 프로세스를 ready queue에 도착한 순서대로 스케줄링 하되, CPU를 점유할 수 있는 최대 시간(time quantum)을 정해 놓고 해당 시간이 지나면 다음 프로세스를 스케줄링 하는 방식입니다. Running 중이던 프로세스가 중간에 interrupt 혹은 system call을 받으면, 정해진 time quantum을 모두 사용하지 못하고 CPU에서 내려오게 됩니다. 그러나 중간에 아무런 방해를 받지 않고 쭉 수행되게 된다면, CPU의 timer가 interrupt를 발생시켜 커널 모드로 전환되게 됩니다. Round Robin Algorithm의 성능은 time quantum의 길이에 따라 달라지게 되는데, 1) time qunatum의 길이가 무한.. 2022. 6. 13.
스케줄링_알고리즘_FCFS, SJF, SRTF, Priority Scheduling scheduling algorithm FCFS Scheduling (FIFO) - First Come, First Served - 도착한 순서대로 스케줄링 되는 방식 - 장점: 일반적으로, Non-preemptive 이며, 프로세스 간 fairness가 보장되어 Starvation 문제가 없음 - 단점: 수행시간이 긴 프로세스가 앞에 배치되면 average waiting time이 길어짐(Convoy effect) SJF Scheduling - Shortest Job First - CPU burst time이 작은 순으로 스케줄링 되는 방식 - Non-preemtive SRTF Scheduling - Shortest Remaining Time First - 남아있는 CPU burst time이 작은 순으.. 2022. 5. 11.
스케줄링_CPU Scheduling Schedulers 스케줄러는 크게 3가지로 구분할 수 있습니다. Long-term scheduler(Job scheduler) 메모리가 부족할 때, 디스크에 있는 프로그램 중 어떤 것을 메모리에 적재하고 ready queue에 넣을 것인지 선택하는 것을 의미합니다. Medium-term scheduler(Swapper) 메모리가 부족할 때, 메모리에 있는 프로세스 중 어떤 것을 디스크로 내릴지 선택하는 것을 의미합니다. Short-term scheduler(CPU scheduler) Ready queue에서 대기하고 있는 프로세스 중 다음으로 CPU를 점유하여 실행될 프로세스를 선택하는 것을 의미합니다. Long-term과 Mid-term은 메모리와 디스크 사이의 swap in, swap out을 다루.. 2022. 5. 11.
쓰레드_Thread, Multithreaded process, User Threads, Kernel Threads Background 프로그램을 실행하면, 디스크에 있던 프로그램이 메모리에 적재되면서 프로세스가 생성됩니다. 프로세스는 전통적인 실행 및 스케줄링 단위로, 코드와 이를 실행하기 위해 필요한 메모리들이 하나로 묶여 구성됩니다. 이를 Process address space 라고 부르며, 각 프로세스는 독자적인 PCB와 PID를 가집니다. 그렇다면 Thread는 무엇이고, 왜 나왔을까요? Thread는 프로세스의 단점을 보완하기 위해 등장하였습니다. Multiprocess 환경 하에서 프로세스들끼리 자원을 공유하고 협력하여 작업을 수행하도록 하려면 어떻게 해야 할까요? fork() 함수를 사용하여 여러개의 프로세스를 만들고 각각의 프로세스가 single execution path를 갖고 작업할 수 있도록 해야.. 2022. 5. 11.
IPC(Inter Process Communication)_Message queue/Shared memory/Sockets IPC(Inter Process Communication) IPC란, 프로세스가 다른 프로세스와 협력을 하면서 일을 처리할 때 서로 정보를 주고 받는 일종의 프로토콜입니다. Unix와 Linux에서의 IPC는 다음과 같은 것들이 있습니다. pipes FIFOs message queue shared memory sockets 본 포스팅에서는 Message queue, Shared memory, Sockets에 대해 다룹니다. Message queue 프로세스 A와 B가 서로 데이터를 주고 받으려고 할 때, 이를 커널에 요청하면 커널은 Message queue를 만들어줍니다. 프로세스 A가 Message queue에 메세지를 남기면, 프로세스 B가 message queue에서 해당 메세지를 읽어갑니다. Me.. 2022. 5. 11.
시스템콜_fork(), exec(), exit() System Call 개발자 입장에서 Process를 control 할 수 있는 도구로, 사용자 application에서 운영체제에게 특정 동작을 요청하는 역할을 수행합니다. 본 포스팅에서는 여러가지 시스템콜 중에서 Process의 생성, 실행, 종료와 관련된 시스템콜들을 다룹니다. int fork() fork()는 부모 프로세스와 동일한 자식 프로세스를 생성하는 시스템콜입니다. fork()가 수행되면, 새로운 PCB와 Process address space를 만들고 초기화합니다. 이후, 부모 프로세스의 Process address space 상태를 자식 프로세스에게 그대로 복사합니다. 부모 프로세스가 사용하고 있던 커널에 의해 할당된 리소스들(ex I/O, 파일)에 대한 정보도 자식 프로세스에 그대로 .. 2022. 5. 11.
프로세스_Process, Process Address Space, PCB, MultiProcessing Process 특정 언어로 프로그램을 작성하면 소스코드 파일이 만들어집니다. C로 작성했다면 *.c, C++로 작성했다면 *.py의 파일이 생성되는데요, 코드 파일을 gcc와 같은 컴파일러로 컴파일 하면 실행파일(.exe, a.out) 이 산출됩니다. 이와 같이 디스크에 저장되어있는 실행파일을 프로그램 이라고 부릅니다. 그렇다면 프로세스는 무엇일까요? GUI에서 프로그램을 더블클릭하거나, 리눅스에서 ./(프로그램 이름)을 명령하면, 디스크에 저장된 프로그램이 로더에 의해 메모리에 복사됩니다. 이와 같이 프로그램이 실행 중인 상태가 되면, 이를 프로세스라고 부릅니다. 프로세스는 실행과 스케줄링의 가장 기본적인 단위로, 프로그램의 복사본과 이를 실행하는데 필요한 데이터(메모리)를 하나로 묶어 구성한 것입니다.. 2022. 5. 11.