pigpgw.velog
로그인
pigpgw.velog
로그인
크래프톤 정글 WIL_Week08 [PintOS] Threads
pigpgw
·
2024년 9월 6일
팔로우
0
크래프톤 정글 6기
크래프톤 정글
목록 보기
10/13
🧠 8주차 회고: PintOS - Threads 프로젝트
📌 학습 개요
이번 주는
PintOS의 Threads 프로젝트
를 집중적으로 진행하며, 운영체제의 스레드 관리와 동시성 제어에 대한 깊은 이해를 목표로 삼았습니다.
스레드 생성, 스케줄링, 우선순위 관리, 세마포어 사용
등을 직접 구현하면서 운영체제의 핵심 원리를 체득했습니다.
🧑💻 학습 및 구현 내용
1. Thread 생성과 스케줄링
init_thread() 함수
와
thread_create() 함수
를 분석하고 구현하면서 스레드 생성 과정에서 필요한 초기화 절차와 구조를 이해했습니다.
Round Robin 스케줄링
을 적용하고,
Multilevel Feedback Queue Scheduler(MLFQS)
로 확장하는 과정에서 스레드 우선순위 관리의 중요성을 느꼈습니다.
2. 동시성 문제 해결을 위한 세마포어와 락
sema_down()
과
sema_up()
함수를 직접 구현하여 세마포어의 동작 원리를 이해하고, 동시성 문제를 해결할 수 있었습니다.
lock_acquire()
와
lock_release()
를 통해
Priority Donation
개념을 구현하여 우선순위 역전 문제를 방지했습니다.
3. 우선순위 스케줄링과 Priority Donation
thread_set_priority()
와
thread_test_preemption()
함수의 구현을 통해 스레드의 우선순위를 동적으로 조정하고, 스케줄링 시 우선순위에 따라 컨텍스트 스위칭이 발생하도록 설정했습니다.
Priority Donation
을 적용하여 우선순위 역전 현상을 방지하고, 우선순위 변경이 다른 스레드에 영향을 미치는 과정을 분석했습니다.
⚙️ 구현 중 겪은 문제와 해결 과정
1. Multiple Donate 구현 시 발생한 문제
multiple donate
기능을 구현하는 과정에서
기존의 donate sema 코드가 작동하지 않는 문제
를 겪었습니다.
문제의 원인은 스레드가 동시에 여러 락을 기다릴 때 우선순위가 제대로 전달되지 않는 것이었습니다. 이를 해결하기 위해
donations 리스트
와
우선순위 비교 함수(compare_priority)
를 개선했습니다.
2. 알람 테스트 실패 원인 분석
alarm-multiple
,
alarm-simultaneous
테스트가 실패하여 원인을 분석했습니다.
문제는
thread_wait()
함수에서 스레드가 슬립 상태로 전환된 후 깨어나는 시점을 제대로 처리하지 못한 것이었습니다.
이를 해결하기 위해
thread_wakeup()
함수 내에서 대기 리스트를 정렬하고,
wakeup_time
을 기준으로 스레드를 올바르게 깨어나도록 수정했습니다.
📖 추가 공부 자료
CSAPP
: Chapter 12 - Concurrent Programming
OSTEP
: Thread & Scheduling 관련 챕터
KAIST PintOS 공식 문서
💡 느낀 점 및 배운 점
이번 주는 단순히 코드를 작성하는 것에 그치지 않고,
운영체제의 스레드 관리 원리를 깊이 있게 이해하는 것
에 초점을 맞췄습니다.
특히,
우선순위 스케줄링과 동시성 제어
에서의 문제 해결 과정이 인상 깊었고, 팀원들과의 코드 리뷰를 통해 다양한 관점을 배울 수 있었습니다.
PintOS 프로젝트는 기존에 알던 이론을 실제 코드에 적용하는 좋은 경험이었으며, 운영체제의 내부 동작 방식을 더 깊이 이해하게 되었습니다.
pigpgw
https://www.pigpgw.cloud 로 이전합니다~
팔로우
이전 포스트
크래프톤 정글 WIL_Week07 웹서버 만들기
다음 포스트
크래프톤 정글 WIL_Week 9 ~10 [PintOS] User Programs
0개의 댓글
댓글 작성