[No000039]操作系统Operating Systems用户级线程User Threads
多进程是操作系统的基本图像

是否可以资源不动而切换指令序列?
进程 = 资源 + 指令执行序列

- 线程: 保留了并发的优点,避免了进程切换代价
- 实质就是映射表不变而PC 指针变
多个执行序列+ 一个地址空间是否实用?
一个网页浏览器
- 一个线程用来从服务器接收数据
- 一个线程用来显示文本
- 一个线程用来处理图片( 如解压缩)
- 一个线程用来显示图片
这些线程要共享资源吗?
- 接收数据放在100 处,显示时要读..
- 所有的文本、图片都显示在一个屏幕上
开始实现这个浏览器…
void WebExplorer()
{ char URL[] = "http://cms.hit.edu.cn";
char buffer[1000];
pthread_create(..., GetData, URL, buffer);
pthread_create(..., Show, buffer); }
void GetData(char *URL, char *p){...};
void Show(char *p){...};

Create? Yield?
核心是Yield…
- 能切换了就知道 切换时需要是个什么样子(样子弄明白了,剩下的就是写程序实现这个样子了…)
- Create 就是要制造出 第一次切换时应该的样子
仔细看Yield ,就是100 跳到300


两个执行序列与一个栈…


(3) 再往下执行会怎么样 ?
问题怎么解决?
为什么?
从一个栈到两个栈…

Yield 切换要先切换栈,然后...
- (3) 再往下执行会怎么样 ?
- 204 是调用 Yield()才压栈的 …
void Yield(){
TCB1.esp=esp;
esp=TCB2.esp;
jmp 204; 应该去掉
}
两个线程的样子:两个TCB 、两个栈、切换的PC 在栈中
ThreadCreate 的核心就是用程序做出这三样东西

void ThreadCreate(A)
{
TCB *tcb=malloc();
*stack=malloc();
*stack = A;//100
tcb.esp=stack;
}
将所有的东西组合在一起……

gcc -o explorer get.c yield.c … 或 或 gcc get.c.. -lthread
GetData 下载到文本时会调用Yield()…

为什么说是用户级线程——Yield 是用户程序
如果进程的某个线程进入内核并阻塞,则…


核心级线程核心级线程和用户级线程区别,哪个快?
ThreadCreate是系统调用,会进入内核,内核知道TCB

- gcc -o explorer explorer.c yield.c …
- 内核级线程gcc -o explorer explorer.c… ;ThreadCreate是系统调用;Yield() 用户不可见,调度点由系统决定
[No000039]操作系统Operating Systems用户级线程User Threads的更多相关文章
- [No00003A]操作系统Operating Systems 内核级线程Kernel Threads内核级线程实现Create KernelThreads
开始核心级线程 内核级线程对多核的支持怎么样? 和用户级相比,核心级线程有什么不同? ThreadCreate 是系统调用,内核管理TCB ,内核负责切换线程 如何让切换成型? − − 内核栈,TCB ...
- 操作系统学习笔记5 | 用户级线程 && 内核级线程
在上一部分中,我们了解到操作系统实现多进程图像需要组织.切换.考虑进程之间的影响,组织就是用PCB的队列实现,用到了一些简单的数据结构知识.而本部分重点就是进程之间的切换. 参考资料: 课程:哈工大操 ...
- [No00003D]操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock
操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock 可以操刀了—从纸上到实际 从Linux 0.11 那里学点东西… 读磁盘 ...
- [No00003C]操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore
操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore 进程合作:多进程共同完成一个任务 从纸上到实际:生产者− − ...
- 多线程 用户级线程和内核级线程 from C++多核高级编程
转 http://book.51cto.com/art/201006/206946.htm 6.1.1 用户级线程和内核级线程 2010-06-21 20:37 齐宁/董泽惠 译 清华大学出版社 字号 ...
- {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器
Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...
- linux0.11内核源码——用户级线程及内核级线程
参考资料:哈工大操作系统mooc 用户级线程 1.每个进程执行时会有一套自己的内存映射表,即我们所谓的资源,当执行多进程时切换要切换这套内存映射表,即所谓的资源切换 2.但是如果在这个进程中创建线程, ...
- Linux用户级线程和内核级线程区别
1.内核级线程: (1)线程的创建.撤销和切换等,都需要内核直接实现,即内核了解每一个作为可调度实体的线程.(2)这些线程可以在全系统内进行资源的竞争.(3)内核空间内为每一个内核支持线程设置了一个线 ...
- 内核级线程(KLT)和用户级线程(ULT)
内核级线程(KLT)和用户级线程(ULT) tags: KLT ULT 内核级线程 用户级线程 引言:本文涉及到操作系统的内核模式和用户模式,如果不太懂的话,可以参看我的这篇文章内核模式和用户模式,其 ...
随机推荐
- SharePoint 2013 REST 服务使用简介
1.创建测试使用列表”REST Demo”,插入一些测试数据,如下图: 2.添加内容编辑器,并且添加脚本引用以及HTML代码,如下图: Result的Div为显示结果使用,input标签触发REST服 ...
- JSOM 对User的操作
一.操作当前用户 //Load current user info function LoadCurUser() { var curUser; curUser = curWeb.get_current ...
- Java 静态语句块、语句块、构造函数执行顺序
class Parent{ static String name = "hello"; { System.out.println("3 parent block" ...
- 操作系统开发系列—12.d.扩充内核 ●
现在把esp.GDT等内容放进内核中,我们现在可以用C语言了,只要能用C,我们就避免用汇编. 下面看切换堆栈和GDT的关键代码: ; 导入函数 extern cstart ; 导入全局变量 exter ...
- iOS中使用 Reachability 检测网络
iOS中使用 Reachability 检测网络 内容提示:下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Reachability都 ...
- UITableView详细注释
style //普通 UITableViewStylePlain, //分组 UITableViewStyleGrouped //表格视图 UITableView * tableView = [[UI ...
- 敏捷软件开发(4)--- TEMPLATE METHOD & STRATEGY 模式
1.TEMPLATE METHOD 泛型,也就是这个模式,是可以基于泛型的. 我们往往会有一些算法,比如排序算法.它的算法部分,我可以把它放在一个基类里面,这样具体类型的比较可以放在子类里面. 看如下 ...
- Sandcastle----强大的C#文档生成工具
最近客户索要产品的二次开发类库文档,由于开发过程中并没有考虑过此类文档,而且项目规范比较,持续时间比较长,经手人比较多,还真是麻烦,如果人工制作文档需要是一个比较大的工程.还好有这个文档生成工具,能够 ...
- #VSTS 日志# TFS 2015 Update 1 发布 – Git和TFVC代码库可以混合使用了
Visual Studio Team Foundation Server 2015 Update 1已经发布了. 这是 Team Foundation Server (TFS) 的最新版本,是 Mic ...
- Angularjs之如何在跨域请求中传输Cookie
一般情况我们在使用WebApi之类的技术时,都会遇到跨域的问题,这个只需要在服务端做一下处理即可. 如果这些GET或POST请求不需要传递Cookie数据的话,就没什么问题了,但如果需要,那么会发现 ...