《信息安全系统设计基础》第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周学习总结相关推荐

  1. 20135219洪韶武——信息安全系统设计基础第五周学习总结

    信息安全系统设计基础第五周学习总结 学习任务:教材第四章[处理器体系结构] 学习时间:10小时  一.教材知识点梳理[4.1-4.3] 1.ISA[指令集体系结构] 一个处理器支持的指令和指令的字节级 ...

  2. 20135219洪韶武——信息安全系统设计基础第十一周学习总结

    信息安全系统设计基础第十一周学习总结 学习时间:10小时 学习内容:课本第八章  一.重点内容 1.重点理解异常的概念.种类.问题处理 (1)控制流的概念 从处理器加点开始,直到断点为止,PC假设一个 ...

  3. # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结

    2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...

  4. 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结

    - 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...

  5. 20135203齐岳 信息安全系统设计基础第十三周学习总结

    20135203齐岳 信息安全系统设计基础第十三周学习总结 学习计时:8/9共小时(计划/实际) 读书:4/5 代码:1/1 作业:1/1 博客:2/2 第十二章 并发编程 一.学习目标 掌握三种并发 ...

  6. # 20155337 2017-2018-1 《信息安全系统设计基础》第一周学习总结

    20155337 2017-2018-1 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 1.1信息就是位+上下文 hello.c程序是以字节序列的方式储存在文件中的.每个字节都 ...

  7. 20145227《信息安全系统设计基础》第一周学习总结

    20145227<信息安全系统设计基础>第一周学习总结 学习内容总结 Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命 ...

  8. 2018-2019 20165203 《信息安全系统设计基础》第一周学习总结

    2018-2019-1 20165203 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 编译:gcc [选项] [文件名] 选项参数表 参数 对应功能 -E 仅执行编译预处理 ...

  9. 2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结

    2018-2019-1 20165221 <信息安全系统设计基础>第一周学习总结 教材学习总结 有关vim 打开方式:vim [文件名] 按i会进入insert模式,可以对代码进行编辑 按 ...

  10. 2017-2018-1 20155209 《信息安全系统设计基础》第一周学习总结

    2017-2018-1 20155209 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 计算机系统就是由可以看到的硬件和系统内的软件组成的,然后用来运行应用程序. 我们平时使用 ...

最新文章

  1. 计算机视觉方向简介 | 单目微运动生成深度图
  2. 箭头函数参数和返回值
  3. video 满屏显示_HTML5 video进入全屏和退出全屏的实现方法
  4. 关于GNS3占用很大CPU的问题,很大可能对你有用
  5. 【mongodb系统学习之四】查看mongodb进程
  6. 积木报表对比帆软报表有什么区别?
  7. js分享微信 ,微博 ,qq空间
  8. Web Api 中返回JSON的正确做法
  9. Mac技巧:如何使用macOS Big Sur中“通知中心”的小组件?
  10. JavaSE笔记(0)JavaSE学习路线
  11. ubuntu安装Arial.ttf字体
  12. Linux ubuntu下载及安装教程
  13. OpenJ_Bailian - 1088:滑雪
  14. CAD打碎块(网页版)
  15. selenium实现自动播放音乐
  16. 关于vs中出现lnk2019和lnk1120错误
  17. 敏捷实践不可忽略的环节
  18. New UI-Hierarchy Viewer工具解析app的界面布局
  19. 处理setInterval造成的浏览器内存溢出
  20. 火星人-洛谷 1088

热门文章

  1. STM32官方的一些参考手册资料
  2. Mac显示和关闭隐藏文件
  3. Spring Cloud Ribbon 全解 (4) - 基本组件实现源码(2)
  4. android 揭示动画_揭示自动驾驶汽车第4级和第5级的真实含义
  5. 未来,什么样的程序员才是不可替代的?
  6. Apollo在有赞的实践
  7. 关于4A(统一安全管理平台)系统的理解
  8. Android facebook VK 登录与分享 开源SDK
  9. ansible-playbook实战之部署redis+sentinel+twemproxy
  10. vscode和ide(JetBrains全款)安装 Material Theme UI主题