리눅스 공부하다가 wait queue관련해서 질문드립니다
scheduler를 직접 구현해 보고 싶어서 공부하는데 도저히 진도가 안나가서 여기 질문드립니다.
kernel에서 가상 cpu의 객채를 구현하여 user process에서 실제 프로세스처럼 동작하는 가상 프로세스 객체를 구현하는것이 목표인데
user program은 구현을 했는데 가상 cpu의 구현이 어렵습니다.
FCFS를 구현하고자 하는데 wait queue를 어떻게 써야할지 감이 안옵니다.
일단 주어진 부분은 아래와같습니다.
asmlinkage int sys_ku_cpu(char name[4], int job){
pid_t pid = current->pid; //pid_t 자료형으로 현재 프로세스의 pid저장
if(now == IDLE) now = pid; //IDLE 상태라면 처리중인 프로세스 등록
if(now == pid){//현재 처리중인 프로세스의 요청이면
if(job == 0){//cpu를 모두 사용했으면
printk("Process Finish : %s\n", name);
if(is_empty()) now = IDLE;//큐가 비었다면 IDLE 상태가 됨
else now = pop();//큐에서 다음 프로세스를 꺼내 등록
}
else
printk("Working : %s\n",name);
return 1;//요청수락됨
}
else{ //현재 처리중인 프로세스의 요청이 아니면
if(is_new(pid)) push(pid);//새로운 요청이면 큐에 추가
printk("Working : %s\n", name);
}
return 0;//요청 거절됨
}
여기서 제가 wait queue및 부족한 부분을 채워넣으면 되는데
이때 wait queue를 구현할때 그냥 DECLARE_WAIT_QUEUE_HEAD(name) 와 같이 원래 명령어를 그냥 이용해도 될까요??
아니면 제가 직접 queue를 구현해야 할까요??
시작부터 갈피를 못잡아서 진도가 안나가네요 ㅠㅠ
잘모르겠습니다 ㅎ ㅎ
가상의 CPU 를 구현한다는것이 hypervisor 에서 하는 CPU virtualization 하시겠다는 것인지...
커널에서 가상의 CPU 를 구현을 한다는것이 그... 부팅코드에서 CPU 검사하는 코드자체를 우회하여서 유니코어라면 가상으로 멀티코어로 만들려고 하신다면 것인지 모르겠습니다
전자에 가상화는 운영체제가 자신이 CPU 를 온전히 독점한것으로 알게해주는것인가 ?
그래서 instruction 을 분리하여 처리를 하여줍니다...
Critical instruction ... Privilege instructions 등등 4 가지인가로 분리하여 생각하는걸로 알고있습니다
그래서 동시에 운영체제를 여러개 시행하도록 ??
후자의 경우는..... 커널의 부팅코드부터 통체로 설정을 변경해야하나요 ??
저도 생각이 않되서 ㅠㅠ
그렇다면 커널내에서 함수의 호출을 할경우 크게보면 커널은 자신이 CPU 를 온전히 사용하는줄 아는것인데.....
그게 CPU 가상화일까 하는 의문도 가져봅니다.
아무것도 모르는 사람의 댓글이였습니다.....
틀린부분이 많을것입니다 ㅎㅎ 하지만 그냥 생각을 적어봅니다 ㅎㅎ
댓글 달기