이전 포스팅에서 pintos 2~3 주차의 주요 목표와 pintos에서 시스템 콜이 발생하는 과정에 대해 알아보았다. 2025.05.19 - [크래프톤 정글] - [pintos] Week2~3: User Program Part.1 [pintos] Week2~3: User Program Part.11주 차에 Alarm Clock, Priority Scheduling과 같이 동기화와 스케줄링에 대해 다루었다면 2~3주 차는 User Program이 Pintos에서 돌아갈 수 있도록 구현을 진행한다.User Program을 OS에 로드하고, System Call을 통해 Uwww.gowoong.com이번 시간에는 ELF와 Load에 대해 알아보고 유저 프로그램을 pintos에서 실행하기 위한 과정을 알아보도록 ..
1주 차에 Alarm Clock, Priority Scheduling과 같이 동기화와 스케줄링에 대해 다루었다면 2~3주 차는 User Program이 Pintos에서 돌아갈 수 있도록 구현을 진행한다.User Program을 OS에 로드하고, System Call을 통해 User Program과 커널이 상호작용하는 방법에 대해 공부하고 그 내용을 기록하려고 한다.전체 플로우이전 프로젝트(1주차) 에서는 테스트 코드를 커널에 바로 컴파일했기 때문에 커널 안에서 상호작용하는 특정 함수들을 필요로 했다. 이 번주부터는 유저프로그램을 실행하여 운영체제를 테스트한다. 커널 모드와 유저모드운영체제는 보안과 안정성을 위해 하드웨어의 접근 권한을 두 가지 모드로 나누어 놨다. 그 두가지를 각각 커널 모드와 유저 모드..
이전 포스팅에서는 세마포어와 조건 변수에 대한 수정을 진행했다. 이번 포스팅에서는 우선순위 기부기능을 구현하는 것을 목표로 한다.2025.05.12 - [분류 전체보기] - [pintos] Week1: Priority Scheduling - Part.2 [pintos] Week1: Priority Scheduling - Part.2이 전 포스팅에서는 우선순위에 따라 선점을 하는 기능을 구현했다. 이번 포스팅에서는 세마포어, 조건 변수에 따른 Lock 기능을 구현해 보겠다.2025.05.12 - [크래프톤 정글] - [pintos] Week1: Priority Schewww.gowoong.com구현 요구사항 설명의존관계 역전우선순위가 높은 스레드가 우선순위가 낮은 스레드를 기다리는 상황이다.2025.05...
이 전 포스팅에서는 우선순위에 따라 선점을 하는 기능을 구현했다. 이번 포스팅에서는 세마포어, 조건 변수에 따른 Lock 기능을 구현해 보겠다.2025.05.12 - [크래프톤 정글] - [pintos] Week1: Priority Scheduling - Part.1 [pintos] Week1: Priority Scheduling - Part.1이전 포스팅인 Alarm Clock의 경우 pintos를 어떻게 접근해야 하는가? 그런 느낌이 들었다면 Priority Scheduling의 경우 복잡하고 어려웠다. 그리고 다시 한번 느끼게 된 건 문서를 잘 읽고 개념을 잘 잡고www.gowoong.com구현 요구사항 설명잠금(또는 조건 변수)을 기다리는 스레드 집합에서 스레드의 우선순위에 따라 대기 중인 스레드..
이전 포스팅인 Alarm Clock의 경우 pintos를 어떻게 접근해야 하는가? 그런 느낌이 들었다면 Priority Scheduling의 경우 복잡하고 어려웠다. 그리고 다시 한번 느끼게 된 건 문서를 잘 읽고 개념을 잘 잡고 진행하자였다.구현 요구사항 설명pintos는 FIFO(First In First Out)으로 스케줄링을 진행한다.pintos를 우선순위에 따라 스케줄링을 진행하도록 수정하라ready list를 스레드 우선순위에 따라 정렬하라동기화 기본 요소(세마포어, 조건 변수)에 대한 대기 목록을 정렬한다.선점기능을 구현하라선점 지점: 스레드가 준비 목록에 추가될 때(타이머 인터럽트가 호출될 때마다가 아님).구현 목표ready list에 새로 추가된 thread의 우선순위가 현재 CPU를 점..
우선순위 역전(Priority Inversion)은 낮은 우선순위의 스레드가 높은 우선순위의 스레드보다 먼저 CPU를 점유하거나, 높은 우선순위 스레드의 실행을 지연시키는 현상을 의미한다. 이는 멀티스레딩 환경에서 공유 자원과 락(lock)이 있을 때 주로 발생한다.발생 시나리오L (Low priority) 스레드가 공유 자원(R)을 사용 중이다.H (High priority) 스레드가 실행되며, 같은 자원 R에 접근하려고 한다.하지만 자원 R은 이미 L이 점유 중이므로, H는 대기하게 된다.그 사이 M (Medium priority) 스레드가 스케줄러에 의해 실행된다.M은 자원 R과 무관하지만 H보다 우선순위가 낮으므로 원래 H 다음에 실행되어야 하지만,현재 H는 자원 대기 상태이므로 M이 계속 실행됨..