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

线程的实际作用:
浏览器进程:
- thread1从服务器接收数据
- thread2负责显示文本
- thread3用来处理图片
- thread4用来显示图片
如果不采用多thread模式,那就要等数据-显示一部分-等数据-显示一部分。
显示网页:
- 先下一些文本
- 显示这些文本
- 下载一些图片。。。
这样你会看到一个网页动态加载,而不是最后一起显示,并且少了很多等待时间。
如何切换线程?
使用Create进行创建。
使用Yield进行礼让。

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

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

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

并且,Yield是用户程序,完全在用户态切换,操作系统完全感知不到线程的切换,自始至终都没有用到内核
但是,在内核内被阻塞的时候,例如在等硬件资源,是整个进程被阻塞,所有线程都有被停下。
与之相对的是,核心级线程,其进行系统调用,进入内核,内核知道TCB的存在,也就知道线程的存在。

浙公网安备 33010602011771号