리눅스 공부하다가 wait queue관련해서 질문드립니다

mcjj의 이미지

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를 구현해야 할까요??

시작부터 갈피를 못잡아서 진도가 안나가네요 ㅠㅠ

jb0730의 이미지

가상의 CPU 를 구현한다는것이 hypervisor 에서 하는 CPU virtualization 하시겠다는 것인지...
커널에서 가상의 CPU 를 구현을 한다는것이 그... 부팅코드에서 CPU 검사하는 코드자체를 우회하여서 유니코어라면 가상으로 멀티코어로 만들려고 하신다면 것인지 모르겠습니다

전자에 가상화는 운영체제가 자신이 CPU 를 온전히 독점한것으로 알게해주는것인가 ?
그래서 instruction 을 분리하여 처리를 하여줍니다...
Critical instruction ... Privilege instructions 등등 4 가지인가로 분리하여 생각하는걸로 알고있습니다
그래서 동시에 운영체제를 여러개 시행하도록 ??

후자의 경우는..... 커널의 부팅코드부터 통체로 설정을 변경해야하나요 ??
저도 생각이 않되서 ㅠㅠ

그렇다면 커널내에서 함수의 호출을 할경우 크게보면 커널은 자신이 CPU 를 온전히 사용하는줄 아는것인데.....
그게 CPU 가상화일까 하는 의문도 가져봅니다.

아무것도 모르는 사람의 댓글이였습니다.....
틀린부분이 많을것입니다 ㅎㅎ 하지만 그냥 생각을 적어봅니다 ㅎㅎ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.