20145204 张亚军《信息安全系统设计基础》第13周学习总结
《信息安全系统设计基础》第13周学习总结
教材学习内容
并发编程
1、程序级并发——进程
2、函数级并发——线程
三种基本的构造并发程序的方法:
1、进程:每个逻辑控制流是一个进程,由内核进行调度,进程有独立的虚拟地址空间
2、I/O多路复用:逻辑流被模型化为状态机,所有流共享同一个地址空间
3、线程:运行在单一进程上下文中的逻辑流,由内核进行调度,共享同一个虚拟地址空间
基于进程的并发编程
构造并发程序最简单的方法——用进程。常用函数:fork,exec,waitpid
优点:防止虚拟存储器被错误覆盖
缺点:开销有时会很高,共享状态信息才需要IPC机制
需要注意的事情:
1、父子进程之间共享文件表,但是不共享用户地址空间
2、必须要包括一个SIGCHLD处理程序来回收僵死子进程的资源
基于I/O多路复用的并发编程
- 使用select函数要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。
select函数处理类型为fd_set的集合,即描述符集合。
- 当且仅当一个从该描述符读取一个字节的请求不会阻塞时,描述符k表示准备好可以读了
必须在每次调用select时都更新读集合
基于线程的并发编程
线程:就是运行在进程上下文中的逻辑流。
线程由内核自动调度。每个线程都有它自己的线程上下文:
一个唯一的整数线程ID——TID
- 栈
- 栈指针
- 程序计数器
- 通用目的寄存器
- 条件码
线程执行模型
一、线程执行模型
1.主线程,进程中第一个运行的线程
2.对等线程,某时刻主线程创建,之后两个线程并发运行每个对等线程都能读写相同的共享数据。
3.主线程切换到对等线程
Posix线程
- Posix线程是C程序中处理线程的一个标准接口。基本用法是:
- 线程的代码和本地数据被封装在一个线程例程中
- 每个线程例程都以一个通用指针为输入,并返回一个通用指针。
线程
1、创建线程:pthread_create函数,返回时参数tid包含新创建线程的ID
2、 查看线程ID:pthread_self函数,返回调用者的线程ID(TID)
3、终止线程
1.隐式终止:顶层的线程例程返回
2.显示终止:调用pthread_exit函数(如果主线程调用,会先等待所有其他对等线程终止,再终止主线程和整个进程)返回值为pthread_return
3.某个对等线程调用Unix的exit函数,会终止进程与其相关线程
4.另一个对等线程通过以当前线程ID作为参数调用pthread_cancle来终止当前线程
4、 回收已终止线程的资源
pthread_join函数等待其他线程终止
这个函数会阻塞,知道线程tid终止,将线程例程返回的(void*)指针赋值为thread_return指向的位置,然后回收已终止线程占用的所有存储器资源
5、分离线程
- 任何一个时间点上,线程是可结合的或者是分离的。
- 一个可结合的线程能够被其他线程收回其资源和杀死;一个可分离的线程是不能被其他线程回收或杀死的。它的存储器资源在它终止时有系统自动释放。
- 默认情况下,线程被创建成可结合的,为了避免存储器漏洞,每个可集合的线程都应该要么被其他进程显式的回收,要么通过调用pthread _detach函数被分离。
6、初始化线程
- pthread _once函数允许初始化与线程例程相关的状态。
- once _control变量是一个全局或者静态变量,总是被初始化为PTHREAD _ONCE _INIT
多线程程序中的变量共享
线程存储器模型
每个线程和其他线程一起共享进程上下文的剩余部分。包括整个用户虚拟地址空间,是由只读文本、读/写数据、堆以及所有的共享库代码和数据区域组成的。线程也共享同样的打开文件的集合。
任何线程都可以访问共享虚拟存储器的任意位置。寄存器是从不共享的,而虚拟存储器总是共享的。将变量映射到存储器
- 全局变量:虚拟存储器的读/写区域只会包含每个全局变量的一个实例。
- 本地自动变量:定义在函数内部但没有static属性的变量。
- 本地静态变量:定义在函数内部并有static属性的变量。
用信号量同步线程
- 共享变量引入了同步错误的可能性。
- 线程i的循环代码分解为五部分:
1.Hi:在循环头部的指令块
2.Li:加载共享变量cnt到寄存器%eax的指令,%eax表示线程i中的寄存器%eax的值
3.Ui:更新(增加)%eax的指令
4.Si:将%eaxi的更新值存回到共享变量cnt的指令
5.Ti:循环尾部的指令块。
进度图
- 进度图将指令执行模式化为从一种状态到另一种状态的转换。转换被表示为一条从一点到相邻点的有向边。合法的转换是向右或者向上。
- 临界区:对于线程i,操作共享变量cnt内容的指令构成了一个临界区。
- 互斥的访问:确保每个线程在执行它的临界区中的指令时,拥有对共享变量的互斥的访问。
信号量
- 当有多个线程在等待同一个信号量时,你不能预测V操作要重启哪一个线程。
- 信号量不变性:一个正在运行的程序绝不能进入这样一种状态,也就是一个正确初始化了的信号量有一个负值。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 30篇 | 400小时 | |
第一周 | 40/40 | 1/1 | 20/20 | |
第二周 | 30/70 | 1/2 | 30/50 | |
第三周 | 21/91 | 1/3 | 28/78 | |
第五周 | 131/222 | 1/4 | 20/98 | |
第六周 | 32/254 | 1/5 | 21/119 | |
第七周 | 200/454 | 1/5 | 21/119 | |
第八周 | 0/454 | 2/7 | 10/129 | |
第九周 | 84/538 | 2/9 | 15/144 | |
第10周 | 441/979 | 2/11 | 10/154 | |
第11周 | 460/1439 | 2/13 | 20/174 | |
第12周 | 300/1739 | 2/15 | 20/194 | |
第13周 | 301/2040 | 1/16 | 19/213 |
代码托管
代码链接
参考资料
- Linux基础入门
- Linux下C语言开发基础
- ...
转载于:https://www.cnblogs.com/yayaer/p/6160739.html
20145204 张亚军《信息安全系统设计基础》第13周学习总结相关推荐
- 20135219洪韶武——信息安全系统设计基础第五周学习总结
信息安全系统设计基础第五周学习总结 学习任务:教材第四章[处理器体系结构] 学习时间:10小时 一.教材知识点梳理[4.1-4.3] 1.ISA[指令集体系结构] 一个处理器支持的指令和指令的字节级 ...
- 20135219洪韶武——信息安全系统设计基础第十一周学习总结
信息安全系统设计基础第十一周学习总结 学习时间:10小时 学习内容:课本第八章 一.重点内容 1.重点理解异常的概念.种类.问题处理 (1)控制流的概念 从处理器加点开始,直到断点为止,PC假设一个 ...
- # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结
2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...
- 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结
- 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...
- 20135203齐岳 信息安全系统设计基础第十三周学习总结
20135203齐岳 信息安全系统设计基础第十三周学习总结 学习计时:8/9共小时(计划/实际) 读书:4/5 代码:1/1 作业:1/1 博客:2/2 第十二章 并发编程 一.学习目标 掌握三种并发 ...
- # 20155337 2017-2018-1 《信息安全系统设计基础》第一周学习总结
20155337 2017-2018-1 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 1.1信息就是位+上下文 hello.c程序是以字节序列的方式储存在文件中的.每个字节都 ...
- 20145227《信息安全系统设计基础》第一周学习总结
20145227<信息安全系统设计基础>第一周学习总结 学习内容总结 Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命 ...
- 2018-2019 20165203 《信息安全系统设计基础》第一周学习总结
2018-2019-1 20165203 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 编译:gcc [选项] [文件名] 选项参数表 参数 对应功能 -E 仅执行编译预处理 ...
- 2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结
2018-2019-1 20165221 <信息安全系统设计基础>第一周学习总结 教材学习总结 有关vim 打开方式:vim [文件名] 按i会进入insert模式,可以对代码进行编辑 按 ...
- 2017-2018-1 20155209 《信息安全系统设计基础》第一周学习总结
2017-2018-1 20155209 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 计算机系统就是由可以看到的硬件和系统内的软件组成的,然后用来运行应用程序. 我们平时使用 ...
最新文章
- 计算机视觉方向简介 | 单目微运动生成深度图
- 箭头函数参数和返回值
- video 满屏显示_HTML5 video进入全屏和退出全屏的实现方法
- 关于GNS3占用很大CPU的问题,很大可能对你有用
- 【mongodb系统学习之四】查看mongodb进程
- 积木报表对比帆软报表有什么区别?
- js分享微信 ,微博 ,qq空间
- Web Api 中返回JSON的正确做法
- Mac技巧:如何使用macOS Big Sur中“通知中心”的小组件?
- JavaSE笔记(0)JavaSE学习路线
- ubuntu安装Arial.ttf字体
- Linux ubuntu下载及安装教程
- OpenJ_Bailian - 1088:滑雪
- CAD打碎块(网页版)
- selenium实现自动播放音乐
- 关于vs中出现lnk2019和lnk1120错误
- 敏捷实践不可忽略的环节
- New UI-Hierarchy Viewer工具解析app的界面布局
- 处理setInterval造成的浏览器内存溢出
- 火星人-洛谷 1088