OS-李治军-L10-用户级线程

用户级线程

核心问题:操作系统是如何切换起来的?
先引出线程的概念:
一个程序下面还有一些小程序,这些小程序共享一块内存块,因此切换的时候不改变映射表,所以切换起来特别快。
切换=指令(pc)切换+资源切换

线程的实际作用:
浏览器进程:

  • thread1从服务器接收数据
  • thread2负责显示文本
  • thread3用来处理图片
  • thread4用来显示图片

如果不采用多thread模式,那就要等数据-显示一部分-等数据-显示一部分。
显示网页:

  1. 先下一些文本
  2. 显示这些文本
  3. 下载一些图片。。。

这样你会看到一个网页动态加载,而不是最后一起显示,并且少了很多等待时间。

如何切换线程?
使用Create进行创建。
使用Yield进行礼让。

核心是Yield。
两个执行序列应该要有自己的栈。

Yield要做的一件重要的事情:切换栈,将当前栈保存到TCB当中。
同时一个重点是,不用进行PC的切换,因为PC已经压栈了。

Create:
初始化Yield所需要的栈,并与TCB关联。

并且,Yield是用户程序,完全在用户态切换,操作系统完全感知不到线程的切换,自始至终都没有用到内核
但是,在内核内被阻塞的时候,例如在等硬件资源,是整个进程被阻塞,所有线程都有被停下。

与之相对的是,核心级线程,其进行系统调用,进入内核,内核知道TCB的存在,也就知道线程的存在。

posted @ 2020-10-24 14:55  HermioneGranger  阅读(143)  评论(0)    收藏  举报