코드보고 눈치깐 새끼??
나 이거 솔직히말하면 너희도 지리라고 답지 쓰면 안될거같긴 한데
내가 그정도 배려는 못해주겠다.
이거 뭐 걍 지려버렸다 ㅆㅃ ㅋㅋㅋㅋㅋㅋ
대충 고민거리가 첫번째가 뭐였냐면
아니 씨발 c가 0으로 반환되었다는것은 모든애들이 0이라는건데 시발 뭔소리하는거야
왜 0 에 다가 대고 /2 + priority 하고있어?
걍 priority 대입해!
였다가
아 씨발 이거 생각해보니까 c가 언제나 0 이상인 값이 나온다는 보장은,
위에서 RUNNING STATE가 하나 이상은 있어야한다는 점인데??
잠깐 카운터는 프로세스 0은 제외인데? (이거는 그냥 끝값 보정만 잘 되어있는지 확인하면 바로 ㅇㅋ)
여하튼, RUNNING_STATE가 하나도 없으면 c가 -1인데?
이거 예외케이스일텐데 이것도 그냥 while문 바깥으로 튀어나가버린다 좆댔다
근데
-1인상태로 튀어나간다는게 문제가 전혀 안되는건
next가 0인상태로 튀어나간다고 보면 문제가 없고
아 씨발
프로세스 0이라는게 그냥 이짓 하라고 만든 거구나
프로세스 0이 스케쥴링을 담당하는 프로세스인건 아니고, 스케쥴링은 각각의 컨텍스트들이 타이머 인터럽트를 받아서 시스템콜을 호출해서 진행하는 체인구조가 맞지만,
결국 프로세스 0이 하는짓이 스케쥴링 담당이라는것도 맞는거구나
둘다 맞는소리였구나.
여기까지 얻은 정보랑 함께,
마지막으로 아까 맨 처음 들었던 질문
도대체 0을 2로 나누고 거기에다가 더하는 병신짓은 뭐하는거야?
했을때
아 씨발
블록된 애들한테도 프라이오리티를 더하라는 이야기를 하고있는거구나...
그걸 안하면 문제가 발생한다고 코드는 주장하고 있구나.
그게 무슨 문제일까요??
여기까지도 답을 알려줄게
내가 블록된 동안 시간은 많이 흘러서 다른애들의 카운터가 따운되었기에 나는 많이 기다렸고, 블록이 해제만 되면 나는 앵간하면 뛰쳐 나갈수 있겠구나 대기하고 있던 새끼들인데
이새끼들이 잠자고 있는동안에 다른애들이 계속해서 카운터를 초기화해버리면 그새끼들이 우선권을 싹가져가버리는거라는거임.
그러니까, 블록된애들은 아직 0이 아니라는것을 고려해주고 그녀석들도 공정하게 카운터를 프라이오리티 만큼 올려달라는
공정성의 문제였던거임.
그럼 여기서 질문.
ㅇㅋ 프라이오리티를 RUNNING_STATE 인, 즉 0이 된 애들한테만 더해주면 안된다는건 알겠음.
근데 /2 를 안하면 코드는 문제가 되고 있다고 주장하고 있는거임.
왜 나누기 2를 했을까??
이거 초등학교 5학년 수준의 문제임.
어려운건 내가 다 해놨으니까
그것만 대답해봐
백준 티어 낮으면 운영체제는 못한다고 보면 될 거 같다. 0.11 굉장히 기술수준으로 봤을땐 구식에 낡고 수준낮은 OS일거같은데 (개념적인것만 잡혀있고 기술수준은 또별개일테니)
그리고, 그 첫번째 for 블록 그거는 alarm 시그널을 발동시킨다던지, 시그널이 와있는 새끼들을 block 상태에서 running 상태로 바까주는건데 그거는 걍 무시하고 진행해라. 논의랑 관련 없는 내용임
제목은 좀 호들갑이긴 함. 백준에 지리는거 많음. 지림 이 쓸모가있고 그게 기술이라는게 놀라운거지. 마치 길거리 축구묘기하는애들은 많지만 우리는 호나우지뉴의 그라운드에서의 외계인짓에 더 경악하듯이
저 짧은 코드 하나만 봐도 아 스케쥴링은 이렇게 이루어지는거였구나~~~ 뭐 이걸 라운드로빈이라고 부르던 뭐라고 부르던 상관 없이 걍 뭐 그냥 이거였구나 하게 됨. 그게 신기한거임. 까보면 아무것도 아니라니까?
우선순위 높은 애들 먼저 들어가게할려고 한거아님?
한참을 못따라왔음
코드가 지린다니까 코드 안읽어본거?
생존을 영위하려고 그러는거 아님? 이러면 모든 문제에 대해서 답 되는거 알지? 거의 그런급의 답변임
그냥 뭐 안틀리기 위해서 답변하는거??
답 알려줄게. sleep 중에 자꾸만 priority가 더해지면 counter 에 오버플로우 위험이 있으니까 counter가 초깃값 + 2 * priority 보다 커질 수 없도록 제한을 두는거임.
그리고 이 알고리즘의 우선권이 어떻게 됩니까 하면 저렇게 밖에 설명할수가 없음. sleep 중인애들은 sleep을 많이할수록 손해를 보긴 봄
아 근데 이사람 왜이렇게 문과같지 ㅅㅂ... 걍 아무 의미 안담긴 말로 뭉뚱그리려는게
OS 몰라서 대충 보고 대답함ㅋㅋ 카운터가 높아지면 먼저 들어가는거? 가닥을 잘못 잡았네
아 내가 그걸 설명을 안했구나 ㅇㅇㅇㅇ counter 가 타임슬라이스 잔량임
타임슬라이스 잔량이 높을수록 우선권이 주어지는거고, priority는, 0이된 타임슬라이스를 다시 갱신시킬때에 작동하는 식으로 작동하는거임
왜 priority로 선택 안하고 counter 잔량으로 선택하냐는 바보같은 말은 안해줬으면 좋겠음. 그런식으로 설계하면, 한번 priority 높은애만 계속해서 점유하는거고 시분할이라는거 자체가 성립이 안됨. 그새끼만 계속 선택되는거임
priority는 어떻게 구현되는거지?? 오래 기달리면 높아지나?
모든 RUNNING_STATE의 프로세스들의 카운터가 0이 될때까지 카운터는 갱신되지 않음. 왜냐면 프라이오리티가 높다고해서 걔들이 준비되자마자 바로 들어가는게 아님. 그랬다가는 starvation이 생겨서 그럴거임. 뭐 고의적으로 starvation을 유발할정도의 priority를 줄 수도 있다곤 생각하는데 0.11은 코드를 내가 잘못이해한게 아니라면 그런게 없음. 그러니까 내가 아무리 priority가 높더라도, 내가 한번 스케쥴링이 됐으면 그 다음에는 다른 RUNNING state를 가진애한테 차례를 넘겨준다는거임
그러면 모든 애들이, 아 나도 한번 갔다왔고, 다른 RUNNING_STATE에게 ... 하고 있는 그 상태가 모든 RUNNING_STATE의 카운터가 0이된 상황인건데, 그 때에 다시 애들의 counter을 올려줘야할거아님? 그때 counter를 올리는게 달라지는거임.
0.11 코드를 기준으로는 그러니까 우선권이 높을수록, 실제 타임슬라이스 자체가 길기도 하다는 뜻이기도 해
병@신같은 첫문장보고 닉네임 보니까 역시나네 씨발련 ㅋㅋ - dc App