[No000039]操作系统Operating Systems用户级线程User Threads

本文探讨了多进程和线程的基本概念,分析了进程与线程的区别,并通过实例介绍了用户级线程与核心级线程的工作原理及实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

  • 线程: 保留了并发的优点,避免了进程切换代价
  • 实质就是映射表不变而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() 用户不可见,调度点由系统决定

 

转载于:https://www.cnblogs.com/Chary/p/No000039.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值