多进程是操作系统的基本图像

是否可以资源不动而切换指令序列?

进程 = 资源 + 指令执行序列

  • 线程: 保留了并发的优点,避免了进程切换代价
  • 实质就是映射表不变而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的更多相关文章

  1. [No00003A]操作系统Operating Systems 内核级线程Kernel Threads内核级线程实现Create KernelThreads

    开始核心级线程 内核级线程对多核的支持怎么样? 和用户级相比,核心级线程有什么不同? ThreadCreate 是系统调用,内核管理TCB ,内核负责切换线程 如何让切换成型? − − 内核栈,TCB ...

  2. 操作系统学习笔记5 | 用户级线程 && 内核级线程

    在上一部分中,我们了解到操作系统实现多进程图像需要组织.切换.考虑进程之间的影响,组织就是用PCB的队列实现,用到了一些简单的数据结构知识.而本部分重点就是进程之间的切换. 参考资料: 课程:哈工大操 ...

  3. [No00003D]操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock

    操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock 可以操刀了—从纸上到实际 从Linux 0.11 那里学点东西… 读磁盘 ...

  4. [No00003C]操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore

    操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore 进程合作:多进程共同完成一个任务 从纸上到实际:生产者− − ...

  5. 多线程 用户级线程和内核级线程 from C++多核高级编程

    转 http://book.51cto.com/art/201006/206946.htm 6.1.1 用户级线程和内核级线程 2010-06-21 20:37 齐宁/董泽惠 译 清华大学出版社 字号 ...

  6. {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器

    Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...

  7. linux0.11内核源码——用户级线程及内核级线程

    参考资料:哈工大操作系统mooc 用户级线程 1.每个进程执行时会有一套自己的内存映射表,即我们所谓的资源,当执行多进程时切换要切换这套内存映射表,即所谓的资源切换 2.但是如果在这个进程中创建线程, ...

  8. Linux用户级线程和内核级线程区别

    1.内核级线程: (1)线程的创建.撤销和切换等,都需要内核直接实现,即内核了解每一个作为可调度实体的线程.(2)这些线程可以在全系统内进行资源的竞争.(3)内核空间内为每一个内核支持线程设置了一个线 ...

  9. 内核级线程(KLT)和用户级线程(ULT)

    内核级线程(KLT)和用户级线程(ULT) tags: KLT ULT 内核级线程 用户级线程 引言:本文涉及到操作系统的内核模式和用户模式,如果不太懂的话,可以参看我的这篇文章内核模式和用户模式,其 ...

随机推荐

  1. ArcGisServer根据最大最小坐标换算瓦片行列号

    1.前言 在上一节中我们知道了屏幕上一像素等于实际中多少单位长度(米或经纬度)的换算方法,而知道这个原理后,接下来我们要怎么用它呢?它和我们前端显示地图有什么关联呢?这一节,我会尽量详细的将这两个问题 ...

  2. Javascript 中的window.parent ,window.top,window.self 详解

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

  3. System.Security.Cryptography.CryptographicException: 指定了无效的提供程序类型

    这两天在调用银联在线的支付接口,把银联提供的demo代码copy过来放到自己网站上,生成通过了,但是运行的时候就报错了: 指定了无效的提供程序类型. 说明: 执行当前 Web 请求期间,出现未经处理的 ...

  4. IOS开发——02_第一个类的创建、声明…

    在OC中,一般用2个文件来描述一个类: 1..h:类的声明文件,用于声明成员变量.方法.类的声明使用关键字@interface和@end. 注:.h中只是用做方法声明,并不进行实现.什么叫声明呢?简单 ...

  5. Android 常用数据适配器SimpleAdapter

    在<Android 常用数据适配器ArrayAdapter>中介绍了ArrayAdapter数据适配器.但是存在一个缺陷,那就是条目的图标都固定相同,要显示每个条目的图标都不相同,那么使用 ...

  6. (20160604)开源第三方学习之CocoaLumberjack

    CocoaLumberjack是一个很好用的日志打印工具,它可以帮助我们把工程中的日志信息打印到终端或者输出到文件中. 地址:https://github.com/CocoaLumberjack/Co ...

  7. Android Adapter的几个方法

    1  ListView是在什么时候设置对Adapter的数据监听的? 在setAdapter(ListAdapter adapter)中,会先取消ListView中原来的mAdapter中的数据监听( ...

  8. c中的函数

    一. 什么是函数 l 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. l 比如你用C语言 ...

  9. nutz的json视图

    2.3. json视图 返回json视图有两种方法: @Ok("json")  与@Ok(“raw:json”) 2.3.1. @Ok("json") (1) ...

  10. 集群服务器 时间同步 - Chrony

    greenplum,openstack等云计算项目需要集群服务器部署,服务器之间的时间需要同步,但并不是所有机器可以 直接连外网,这时可以用Chrony工具解决. 解决方法是将其中一台设为时间服务器, ...