问题:OS如何切换多个进程切换?
进程=资源+指令执行序列
资源:内存的映射表
线程:保留了并发的优点,避免了进程切换代价(只切换程序,不切换资源)
create() 和yield()函数
栈
两个线程:两个TCB,两个栈,切换的PC在栈中
程序:
void WebExplorer()//main()
{ ThreadCreate(GetData,URL, buffer);...
while(1)Yield(); }
void GetData(char *URL, char *p){
连接URL;下载; Yield();...}
void ThreadCreate(func,arg1){
申请栈;申请TCB;func等入栈;关联TCB与栈;...}
void Yield(){
压入现场;esp放在当前TCB 中;Next();
从下个TCB取出esp;弹栈切换线程;}
调度函数Next(),对系统影响很大。
Yield是用户程序
核心级线程:ThreadCreate是系统调用,会进入内核。内核知道TCB
gcc -o explore get.c yeild.c …或gcc get.c… -lthread
内核级线程gcc -o explorer explorer.c…;ThreadCreate 是系统调用;Yield()用户不可 见,调度点由系统决定