크래프톤 정글 WIL_Week08 [PintOS] Threads

pigpgw·2024년 9월 6일

크래프톤 정글

목록 보기
10/13
post-thumbnail

🧠 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 프로젝트는 기존에 알던 이론을 실제 코드에 적용하는 좋은 경험이었으며, 운영체제의 내부 동작 방식을 더 깊이 이해하게 되었습니다.
profile
https://www.pigpgw.cloud 로 이전합니다~

0개의 댓글