Re: [问题] 听说kernel code 不会被interrupt...

楼主: Artoo (artoo)   2008-12-17 09:05:54
因为Print的实作内会用到Semaphore
1. Print在呼叫kernel->synchConsoleOut->PutChar()时
这里面的Lock会关闭、开启interrupt,其中开启时会呼叫OneTick
就是这里可能会产生context switch
2. SynchConsoleOutput::PutChar()本身每送出一个字符,就会停下来等
这个字符真的被画在萤幕上(一个硬件interrupt,不过这里只是模拟)
就是waitFor->P()那一列
所以这里也会context switch
另外,请勿在Print内使用printf、putchar、cout或任何类似的东西
测试可以,但交作业前请务必更改回来
否则会扣分
※ 引述《robertshih (施抄)》之铭言:
: 但是在multi-program的情况下
:
: Print system call(应该是kernel code)如果没有被semaphore保护
:
: 为何会产生syncronization的问题
:
: ex.
:
: Process 1:
: Print("ABC");
:
: Process 2:
: Print("DEF");
:
: output:
: ADEBCF
:
:

Links booklink

Contact Us: admin [ a t ] ucptt.com