728x90

분류 전체보기 209

WEEK 09 PintOS TIL(5월14일 수요일)

[목표]Priority Scheduling에 대해서 코드를 분석하고, 작성합니다. (진행중)본격적으로 donation을 구현합니다.09:55 ~ 10:30약간의 휴식10:30 ~ 12:00어제 내용 정리를 한번 보고 donation 구현 준비12:00 ~ 13:00랜덤런치 날이므로 다른 팀원분들과 식사를 진행 했습니다.13:30 ~ 16:30카이스트 Pintos 교수님 강의를 들었습니다. 자세한 내용은 다음 포스팅을 참고해주세요!16:30 ~ 18:00donaation을 구현하기 전에 세마포를 구현해야된다고 합니다. 그러므로 세마포어를 먼저 구현하도록 하겠습니다.synch에 대해서 모든 주석을 번역하고 분석하고 있습니다. 빠른 시일내에 세마포어를 구현해보겠습니다.18:00 ~ 19:00식사를 마치고 왔습..

PintOS 프로젝트1 Priority Scheduling (priority-change)

PintOS Project1: Threadspriority-change, priority-fifo, priority-preempt 케이스우선순위 기반 스케줄링을 위해서는 먼저 삽입된 쓰레드의 우선순위가 더 높다면, 즉시 양보(yield)해줘야합니다.만약, 동기화 도구를 사용한다면 우선순위의 쓰레드가 먼저 켜져야합니다.이번 문제부터 세세하게 바뀌는 것도 있고 코드 순서대로 설명하는 것이 어렵습니다. 그러므로 제목에 있는 숫자 순서대로 설명을 참고하면 좋을 것 같습니다.코드 순서는 밑에 나와있는 순서와 같습니다. 설명만 숫자를 참고하여 봐주세요. 사람마다 구현 순서는 다를 수 있습니다.threads.c2. thread_create정렬 유지하는 priority_cmp 선언합니다.// 추가된 우선순위 비교boo..

WEEK 09 PintOS TIL(5월13일 화요일)

[목표]Priority Scheduling에 대해서 코드를 분석하고, 작성합니다. (진행중)9주차 퀴즈를 수행합니다.10:00 ~ 11:00어제의 내용을 정리했습니다. (사실 좀 잠)11:00 ~ 12:00어제 정리해둔 내용들 중에 보충해야될 내용을 보강하고, 블로그에 포스팅을 했습니다.식사 전까지 다음 과제인 Priority Scheduling에 대해 분석중입니다.12:00 ~ 13:00식사를 하고 잠을 자다 복귀하였습니다.13:00 ~ 14:00본격적으로 Priority Scheduling에 대해 분석중입니다. 퀴즈도 있어서 퀴즈 내용도 봤습니다. (프로세스, 스레드, 동기화 기법 등에 관한 기본 개념 출제 예정)14:00 ~ 14:459주차 퀴즈를 진행했습니다.14:45 ~ 16:45운동(등)을 진..

PintOS 프로젝트1 Alarm Clock

PintOS Project1: ThreadsAlarm Clock카이스트 PintOS 공식 문서: https://casys-kaist.github.io/pintos-kaist/ Introduction · GitBookNo results matching ""casys-kaist.github.ioPintOS 코드 참고용 깃허브: https://github.com/prkty/KJ_pintos GitHub - prkty/KJ_pintos: 정글 9주차 시작된 OS 프로젝트 Pint OS정글 9주차 시작된 OS 프로젝트 Pint OS. Contribute to prkty/KJ_pintos development by creating an account on GitHub.github.com 컴퓨터는 켜지고 나서부터 스..

WEEK 09 PintOS TIL(5월12일 월요일)

사실상 코드를 구현하느라 시간을 다써버리기도 했고, 해당과정을 모두 작성할 수 없어 일부 내용만 다음 포스팅에 디테일한 내용을 담았습니다. 참고하여 봐주시면 감사드리겠습니다.[목표]이제 timer.c에 대해서 분석하고 코딩을 시작합니다.09:55 ~ 12:00timer.c에 대해서 주석을 모두 번역과 해석을 하고 분석 중입니다.12:00 ~ 13:30식사를 하고 잠을 자다 왔습니다.13:30 ~ 17:00계속해서 코드를 분석하고 있습니다. 뭐를 시작해야될지 가늠이 안됩니다.다른 동료분들이랑 코드를 분석하고 방향성을 잡았습니다. 그래서 threads.c를 고쳤습니다. 인스타 이벤트 관련 식권을 수령했습니다.17:00 ~ 18:00운동(하체)을 완료하고 샤워하고 왔습니다.18:00 ~ 18:40식사를 마치고..

WEEK 09 PintOS TIL(5월11일 일요일)

[목표]공식문서와 관련된 내용을 공부합니다. (진행중)어제한 코어타임에 따라 키워드들을 빠르게 정리합니다.13:00 ~ 14:30늦잠을 자고, 뒹굴이 좀 하다가 샤워를 하고 출근했다.14:30 ~ 15:00키워드 정리전에 배가 고파서 간단하게 닭가슴살과 핫식스 하나 먹었다.15:00 ~ 16:30어제 다 못한 키워드들을 정리해 보겠다. Mutex, Moniter, Race Condition, Deadlock, Multi-Level Feedback Queue Scheduler (MLFQS)16:30 ~ 20:00식사를 위한 외출을 했습니다.갔다와서 나머지 3개 개념과 벨로그, 티스토리를 정리하고 코드 작성을 들어가겠다.(분석)20:00 ~ 21:30군대에서 처음 봤던 동생과 식사, 산책을 하고 왔습니다. ..

Busy Waiting (바쁜 대기)

원래 해당 내용이 더 먼저 쓰였는데, 누락되서 이제야 올립니다.Busy Waiting (바쁜 대기)while (!flag) {// do nothing: 계속 검사만 함 (CPU 낭비)}busy waiting(바쁜 대기)는 CPU를 낭비하며 특정 조건이 만족될 때까지 반복적으로 루프를 도는 방식입니다. 즉, flag를 예시로 들면, CPU가 시그널이나 I/O 입력등의 조건이 될때까지 flag 상태만 체크하는 문제입니다.→ 해당 문제를 해결하기 위해 sleep과 wait 매커니즘을 사용합니다.해결 방법들1. Sleep + Interrupt / Signal 사용프로세스를 sleep 상태로 두고, 외부 요청(I/O, 다른 쓰레드의 시그널 등)이 나오면 깨움.→ pause로 대기를 걸고, 요청이 들어오면 sign..

Multi-Level Feedback Queue Scheduler

Multi-Level Feedback Queue Scheduler (MLFQS)스레드 우선순위(priority)를 동적으로 조정하며, 여러 개의 큐에서 스레드를 관리하는 스케줄링 기법입니다.피드백이라는 말처럼, CPU 사용량에 따라 스레드의 우선순위를 낮추거나 높이며, 사용자 개입 없이 스레드의 실행 순서를 자동으로 조정합니다.주요 변수 (초기값 0)nice: 스레드의 우선순위 조절 민감도로 숫자가 높을 수록 덜 우선시됨. (-20 ~ +20)recent_cpu: 해당 스레드가 최근 사용한 CPU 시간 (시간 누적값)long_avg: 시스템 평균 로드 (CPU 점유 스레드 수의 평균)왜 필요하나요?기본 스케줄러 (thread_set_priority)는 우선순위를 수동으로 설정해야합니다.그러나 MLFQS는..

Deadlock (교착 상태)

사실 제가 아는 데드록은 발로란트 요원 데드록밖에 모릅니다. 그러나 컴퓨터 시스템 개념중에 데드록이라는 개념이 있어 이번 시간에는 해당 개념에 대해 알아보는 시간을 가져보겠습니다.Deadlock둘 이상의 스레드가 서로 자원을 점유한 채, 상대방이 가진 자원을 기다리며 무한히 멈춰 있는 상태를 말합니다.→ 서로 양보하지 않고 기다리기만 해서 프로그램이 멈춥니다.예시스레드 A 와 스레드 B가 있습니다.A는 Lock 1을 먼저 획득하고, Lock 2를 기다립니다.B는 Lock 2를 먼저 획득하고, Lock 1을 기다립니다.→ 이렇게 되면 서로가 서로가 가진 Lock을 기다리며 영원히 기다리는 상태입니다.발생 조건 (Coffman 4조건)Deadlock이 발생하려면 다음 4가지 조건을 모두 동시에 만족해야합니다..

Race Condition (경쟁 상태)

Race Condition둘 이상의 스레드 또는 프로세스가 동시에 공유자원에 접근하면서 실행 순서에 따라 결과가 달라지는 상황입니다.→ 누가 먼저 실행되느냐에 따라 프로그램의 결과가 달라지고, 때로는 비정상적이나 예기치 못한 오류가 발생할 수 있습니다.왜 생기나요?공유 자원을 여러 스레드가 동기화 없이 동시에 접근할 때 발생합니다.(특히 읽기-쓰기, 쓰기-쓰기 접근에서 위험합니다.)예제로 분석하기int balance = 0;void deposit() { balance += 100;}void withdraw() { balance -= 100;}두 스레드가 동시에 deposit() 과 withdraw() 를 실행한다면, balance 를 load 하고 값을 바꾸고 다시 store 하는 과정이 겹치면서 실..

728x90