CSED312 Os Scheduling

Scheduler CPU는 멀티 프로세스 환경에서 여러개의 작업에 대해 어떤걸 먼저 해야할지 스케줄을 해야한다. 이런 상황에서, 스케줄러는 다음과 같은 목적을 가진다 응답시간의 최소화 처리율 (throughput) 의 최대화: # of tasks/jobs completed per second 공정성: 유저 간 CPU를 공정하게 사용하는 것 용어 정리 waiting time: 프로세스가 레디큐에서 대기한 총 시간 response time: 첫번째 프로세스에 대한 요청 이후, 첫번째로 응답을 시작한 시간 간의 차이 throughput: 단위 시간당 종료된 프로세스의 개수 turnaround: 프로세스의 제출로부터 종료까지의 시간 Preemptive & non-Preemptive Scheduling 스케줄링을 할 때는 프로세스의 선점에 대한 부분을 고려해야한다....

October 21, 2023 · 5 min · Byungjun Yoon

20231021 Os Deadlock

Deadlock 멀티프로세스 환경에서 여러 프로세스들은 제한된 개수의 자원을 가지고 경쟁을 하게 된다. 따라서, 어떠한 프로세스ㅌ는 필연적으로 대기를 하게 된다. 이러한 대기 상태에서 그 프로세스가 다시 상태가 못 변하는 상황을 우리는 deadlock 이라고 부른다. 좀 더 포멀하게 정의하자면, 어떠한 셋의 프로세스가 모두 대기 상태에 있고, 그 대기 상태를 초래한 프로세스가 그 셋 안에 있을 때, 이 셋의 프로세스는 데드락 상태에 있다고 말할 수 있다. 좀 더 디테일한 조건들은 다음과 같다. Mutual exclusion: 최소 하나의 리소스가 공유 불가능한 상태로 존재해, 해당 리소스를 요청한 프로세스가 대기를 해야한다....

October 21, 2023 · 6 min · Byungjun Yoon

CSED312 OS Multi Object Synch

Multi-Object Synch 여러 개의 오브젝트를 큰 스케일의 프로그램에서 동기화를 하는 건 당연하지만, 성능을 낮게 만들어. 여러개의 스레드의 생성에서의 오버헤드, 한 스레드 밖에 락을 잡을 수 없으니 다른 스레드들이 기다려야하고, 공유 데이터가 여러 프로세서 사이에서 이동을 해야할 수도 있고, 데이터를 사용하지 않는 코어들한테까지 데이터를 옮겨야하는 일도 벌어져. 이번 글에서는 이러한 문제점과 특수 케이스에 대해서 이러한 문제를 해결하는 방법에 대해 이야기 해보려고 해. Multiprocessor Cache Coherence 두 개의 스레드 A,B 가 존재하는 상황이야....

October 21, 2023 · 6 min · Byungjun Yoon

20231018 OS Week4,5 - Synchronization

Synchronization 동시성은 멀티 프로세스 또는 멀티 스레드 환경에서 꼭 고려해야하는 문제이다. CPU 스케줄러는 프로세스 1의 작업 명령어를 전부 실행하지 않은 상태에서 프로세스 2로 스위치 할 수도 있기 때문에, 이러한 문제의 원인을 제공해. 운영체제 내에는 프로세스가 가지고 있는 독립적인 리소스들도 있지만, 여러 프로세스가 공유하는 자원이 있을 때, 이 자원에 접근하는 순서나 실행 순서에 따라서 의도하지 않은 동작을 하는 경우가 많아. 예를 들자면, 1 2 3 4 5 6 7 8 9 10 11 12 13 while (true) while (counter == BUFFER_SIZE) ; /* no nothing */ buffer[in] = next_produced in = (in + 1) % BUFFER_SIZE counter++; while (true) while (counter == 0) ; /* no nothing */ next_consumed = buffer[out]; out = (out + 1) % BUFFER_SIZE counter--; 위의 예시에서 counter가 5일 때, counter++; counter-- 가 연속으로 실행되었을 때 그 값이 5인 것을 보장할 수 없어....

October 20, 2023 · 16 min · Byungjun Yoon

20231018 OS Week3

Thread 스레드 단일 프로세스 안에서도 동시성을 유지할 수 있는 방법으로는 스레드가 있어. 프로세스는 PCB 등으로 표현되는 메타데이터라 여러가지 사전 준비가 필요하지만, 스레드는 그거보다 가벼운 추상화다. 한 프로세스 안에 있는 모든 스레드는 메모리와 파일 디스크립터, code, data, files 등을 공유해. 대신 스레드 별로는 레지스터, 스택을 별도로 사용해. 근데 우리는 왜 스레드가 필요할까? 그냥 프로세스를 여러개 만들면 되지 않을까? 이번 글에서 언급했듯이 프로세스를 만드는데는 훨씬 더 많은 비용이 필요하다. 따라서, 프로그램내에서 특정 기능을 수행하는 부분만 짤라서 작은 단위로 생성하는게 훨씬 싸다....

October 19, 2023 · 3 min · Byungjun Yoon