Search
📝

핀토스 1주차 발제

4가지 주제 : 스레드(1주), 유저 프로그램(2주), VM(2주), 파일시스템(이건 패스)

발제 설명

32비트랑 64비트는 다른거. 그러니 서칭을 할 때 주의해서 할 것 (현재는 64비트인 듯. 근데 정글도 32비트로 진행한 적이 있었어서 32비트 코드를 주의해야함)
다른 사람이 작성한 핀토스 코드는 높은 확률로 제대로 구현 안 된 채로 돌아만 가는 코드들이 많음(주의)
Introduction부터 읽어볼 것
./threads 폴더에서 구현하면 됨
구현할 것들 :
Alarm clock
timer sleep을 수정하라는 내용
priority secheduling
advanced scheduler(optional)
ChatGPT에서 /study를 앞에 붙여주면 AI가 오히려 질문하는 등의 튜터 역할을 한다
이런 식으로 인터렉티브하게 문제를 해결해나가길 바람
선배 기수 블로그들을 참고해서 작성하지 않았으면 좋겠음
어떻게 이해했고 어떤 식으로 풀어나갔는지를 팀과 공유했으면 좋겠음
도커 프로젝트 내에 있는 함수와 데이터 구조만 사용할 것(자체적으로 만들어내지 말 것). 모든게 작성은 되어있으므로, 우선 그 구조를 전체적으로 파악해내는 것도 중요
2번의 OS 특강이 카이스트 교수님이 오셔서 진행할 예정(참고)
목요일에 기존에는 리뷰했었지만, 이제 리뷰는 안 하고 10시부터 곧바로 발표 진행 예정
슬랙에 핀토스 조교님이 등장 예정 → 핀토스 관련 질문을 조교님께 하시면 됨
자료 제출 형식 잘 지켜줄 것!

동석 코치님 설명

Time Sharing

인터럽트를 걸어서 프로세스의 CPU 자원을 빼앗아서 다음 프로세스한테 넘김
운영체제 코드에 핸들러(인터럽트 핸들러)를 정의해두고, 운영체제가 제어권을 가짐으로써 CPU 자원이 클락마다 핸들러를 통해 프로세스의 진행을 중단시킨다?
timer_sleep이라는 함수(시스템 콜)을 통해 쉬고 있는 프로세스를 CPU 자원을 잡아먹지 않게끔 빼앗게 변경해야함
ready_list, sleep_list를 만들어서 sleep 상태랑 ready 상태를 관리하고 프로세스 우선순위를 조정

Priority Scheduling

ready_list : 우선순위가 가장 높은 프로세스를 먼저 실행해야함 → 최소힙이나 sort()된 상태여야할 듯(우선순위가 가장 높은 프로세스가 가장 앞에 있도록)
sleep_list : 가장 짧게 쉬는 프로세스가 가장 앞에 오도록 sort해야할듯

I/O Interrupt

입출력 발생시에는 I/O 인터럽트라는 핸들러가 존재. 그걸로 처리해줘야함 (네트워크 또한 입출력 인터럽트에 해당)
이처럼 여러 가지 상황들을 모두 처리할 수 있도록 해야함

주의사항

이러한 점에서 블로그 코드들이 엉터리라는 것이다
핸들러의 실행시간이 길어지면 안됨
인터럽트가 여러 개 온다고 핸들러를 한 꺼번에 처리해줄 수는 없음. 즉 뮤텍스 락처럼 인터럽트를 해제하고 사용하도록 만들거나 하는 동기화 문제를 해결하는 코드를 작성해야함