Pintos Project1 day 1

John Jean·2024년 8월 23일

pintos

목록 보기
1/7

진행과정

  • 깃허브 리포 생성
  • 브랜치 생성, 콜래보레이터 초대
  • 📍 목표 : 키워드 학습 끝내기 & 이번주 과제에서 뭘 해야하는 지 파악하기.

My job

  • 동기화 문제를 해결하기 위해 주어진 스레드 시스템의 기능을 넓히기(추가하기)
  • threads 디렉토리에서 작업을 하게 될 것.
  • threads.h 에 있는 struct thread(스레드 구조체)에 당신이 구현한 멤버를 추가해야 할 것이다. 이미 있는 멤버들의 정의를 수정하거나 지울 수도 있다. -> 4개 프로젝트를 하며 계속 수정하게 됨.

이해하기

스레드 개념

쓰레드가 생성될 때, 스케쥴링의 대상이 되는 새로운 문맥(context)이 생성됩니다. 만약 이 문맥에서 어떤 함수를 실행하고자 하는 경우, thread_create() 의 인자로 실행하고자 하는 함수를 넣으면 됩니다. 쓰레드가 처음 스케쥴링되고 실행될 때, 쓰레드는 해당 문맥에서 함수의 맨 처음부터 실행합니다. 함수가 리턴될 때 쓰레드도 종료됩니다. 그러므로 각각의 쓰레드는 Pintos 내부에서 실행되는 미니 프로그램 같이 동작한다고 생각하면 됩니다. 마치 프로그램을 실행하면 main() 함수가 실행되는 것처럼, thread_create()가 실행되면 쓰레드에 전달된 함수가 실행됩니다.

  • 스레드는 하나의 프로그램처럼 동작함. 스레드에 실행하고자 하는 함수를 인자로 넣으면 넣은 순서대로 함수가 실행된다.

언제나 한 번에는 하나의 쓰레드만이 실행되고 나머지들은 (만약 있다면) 모두 비활성화 됩니다. 스케쥴러는 다음 실행할 쓰레드를 결정합니다. 만약 다음으로 실행할 쓰레드가 없다면 idle 쓰레드라는 특별한 쓰레드를 실행합니다. (idle 쓰레드는 idle()로 실행됩니다.) 동기화 함수는 하나의 쓰레드가 다른 쓰레드가 뭔가를 하는 것을 기다려야 할 때 문맥교환(context switch) 을 강제 진행합니다.

  • 스레드는 한번에 하나씩 실행. 스레드 실행순서는 스케쥴러로 결정.
  • 스케쥴러가 비어있다면, idle()이라는 스레드가 실행됨.
profile
크래프톤 6기 정글러

0개의 댓글