본문 바로가기

분류 전체보기53

[OS] Scheduling: Proportional Share 앞장에서 MLFQ 스케줄링 방식을 살펴봤었습니다. MLFQ는 turnaround time과 response time 두가지 토끼를 모두 잡는 것을 목표로 한 스케줄링 방식이었습니다. 이번장에서 다룰 Proportional share(fair-share) 스케줄링 방식은 이름에서부터 알 수 있듯이 Fairness, 공정함에 초점을 맞춘 스케줄링입니다. 즉, 각 작업이 CPU를 사용하는 시간의 특정 비율을 보장받을 수 있도록 해주는 스케줄링 방식입니다. 이 Proportional share의 초기 예시로 Lottery Scheduling이 널리 알려져있습니다. 이 Lottery Scheduling의 기본 개념은 매우 간단합니다. 일정 간격으로 복권을 추첨해서, 당첨된 프로세스가 다음에 실행되게 된다(스케줄링.. 2023. 12. 16.
Hashing (Dictionary의 키는 왜 Hashable 타입인가요?) 이번글의 목표 Dictionary의 키는 왜 Hashable 타입인가요? 왜 Dictionary/Set의 탐색은 O(1)인가? 왜 Dictionary 탐색의 최악의 경우는 O(n)인가? Hashable의 hashValue는 왜 Int 인가? Hashing을 왜 하는가? 좋은 해싱 알고리즘이 필요한 이유는? https://soojin.ro/blog/hashable 이번 글의 목표는 위의 질문들에 답변하는 것이 목표입니다. 바로 답을 하진 않을거고, Hashing에 대해서 쭉 살펴본 후에 Swift에서의 hash table 충돌 해결방법을 알아보고, 해당 방법으로 직접 Dictionary를 구현해본 후에 질문에 답을 해보도록 하겠습니다! 레츠고 만약 답변만 보고싶으시다 하시면 쭈욱 내려가서 맨 아래쪽 '답변.. 2023. 12. 15.
Self-deallocating Coordinator Pattern으로 변경 이유 기존 프로젝트에서 Coordinator Pattern을 적용해서 ViewController로부터 화면전환에 대한 책임을 분리시켜주고 있었습니다. 그리고 오늘 하나의 의문점을 바탕으로 기존의 Coordinator Pattern방식에서 조금 변형된 Self-deallocating방식으로 변경하기로 결정했습니다. 오늘은 그 결정을 내리기까지의 과정을 한번 정리해보고자 합니다. 꽤나 두서없는 글이 될 수도 있을 것 같지만 한번 가봅시다. 사건의 발달 protocol Coordinator : AnyObject { var parentCoordinator: Coordinator? { get set } var children: [Coordinator] { get set } var navigationController .. 2023. 12. 14.
[OS] Multi Level Feedback Queue (MLFQ) 이전 글에서 프로그램을 실행해보기도 이전에 프로그램의 실행 시간을 아는 것은 현실적으로 불가능한 이야기이므로 SJF와 STCF같은 정책들이 Optimal하지만 다른 방법을 탐색했어야했습니다. 따라서 "실행 시간을 몰라도 SJF/STCF처럼 효율적이고, Round Robin처럼 공정한 스케줄링 정책은 없는 걸까 "라는 의문을 남긴채 글을 마무리했었습니다. 그 의문을 해소하고자 Multi-Level Feedback Queue(MLFQ)가 등장하게 됩니다. MLFQ의 목적은 두가지입니다. turnaround time(반환 시간)의 최적화 like SJF(or STCF) response time(반응 시간)의 최적화 like RR 즉, 반환시간과 반응시간 두가지의 성능 지표 모두를 노려보는 방법입니다. MLFQ.. 2023. 12. 11.