2018-2019-1 20165228 《信息安全系统设计基础》第八周学习总结

2018-2019-1 20165228 《信息安全系统设计基础》第八周学习总结

教材学习内容总结

并发编程

  • 并发:逻辑控制流在时间上重叠
  • 并发程序:使用应用级并发的应用程序称为并发程序。

    三种基本的构造并发程序的方法:

  • 进程,用内核来调用和维护,有独立的虚拟地址空间,显式的进程间通信机制。
  • I/O多路复用,应用程序在一个进程的上下文中显式的调度控制流。逻辑流被模型化为状态机。

    线程,运行在一个单一进程上下文中的逻辑流。由内核进行调度,共享同一个虚拟地址空间。

  • 基于进程的并发编程

    构造并发程序最简单的方法就是用进程。

  • 一个构造并发服务器的自然方法就是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务。

    基于进程的并发服务器

  • 通常服务器会运行很长的时间,所以我们必须要包括一个 SIGCHLD 处理程序,来回收僵死 (zombie) 子进程的资源。当 SIGCHLD 处理程序执行时, SIGCHLD 信号是阻塞的,而 Unix 信号是不排队的。
  • 父子进程必须关闭它们各自的 connfd 拷贝。父进程必须关闭它的已连接描述符,以避免存储器泄漏。直到父子进程的 connfd 都关闭了,到客户端的连接才会终止。

进程的优劣

  • 优点:一个进程不可能不小心覆盖另一个进程的虚拟存储器,这就消除了许多令人迷惑的错误。
  • 缺点:独立的地址空间使得进程共享状态信息变得更加困难。为了共享信息,它们必须使用显式的IPC(进程间通信)机制。基于进程的设计的另一个缺点是,它们往往比较慢,因为进程控制和 IPC 的开销很高。

基于 I/O 多路复用的并发编程

  • I/O多路复用技术的基本思路:使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序
  • 状态机就是一组状态、输入事件和转移,转移就是将状态和输入时间映射到状态,自循环是同一输入和输出状态之间的转移。

    I/O 多路复用技术的优劣

  • 优点:

    它比基于进程的设计给了程序员更多的对程序行为的控制。

    一个基于 I/O 多路复用的事件驱动服务器是运行在单一进程上下文中的,因 此每个逻辑流都能访问该进程的全部地址空间。

  • 缺点:编码复杂且不能充分利用多核处理器。

    基于线程的并发编程

  • 线程:运行在进程上下文中的逻辑流。

线程有自己的线程上下文,包括一个唯一的整数线程ID、栈、栈指针、程序计数器、通用目的寄存器和条件码。所有运行在一个进程里的线程共享该进程的整个虚拟地址空间

主线程:每个进程开始生命周期时都是单一线程。

对等线程:某一时刻,主线程创建的对等线程。

  • 进度图

    进度图是将n个并发线程的执行模型化为一条n维笛卡尔空间中的轨迹线,原点对应于没有任何线程完成一条指令的初始状态。

  • 转换规则:

    合法的转换是向右或者向上,即某一个线程中的一条指令完成

    两条指令不能在同一时刻完成,即不允许出现对角线

    程序不能反向运行,即不能出现向下或向左

    信号量定义:

type semaphore=record
count: integer;
queue: list of process
end;
var s:semaphore;

读者—写者问题:

(1)读者优先,要求不让读者等待,除非已经把使用对象的权限赋予了一个写者。

(2)写者优先,要求一旦一个写者准备好可以写,它就会尽可能地完成它的写操作。

(3)饥饿就是一个线程无限期地阻塞,无法进展。

其他并发问题

  • 线程安全

    当且仅当被多个并发线程反复地调用时,它会一直产生正确的结果。

  • 可重入性

    显式可重入的:所有函数参数都是传值传递,没有指针,并且所有的数据引用都是本地的自动栈变量,没有引用静态或全剧变量。

    隐式可重入的:调用线程小心的传递指向非共享数据的指针。

竞争

  • 发生的原因:一个程序的正确性依赖于一个线程要在另一个线程到达y点之前到达它的控制流中的x点。也就是说,程序员假定线程会按照某种特殊的轨迹穿过执行状态空间,忘了一条准则规定:线程化的程序必须对任何可行的轨迹线都正确工作。
  • 消除方法:动态的为每个整数ID分配一个独立的块,并且传递给线程例程一个指向这个块的指针

    死锁

  • 死锁:一组线程被阻塞了,等待一个永远也不会为真的条件。

原文地址:https://www.cnblogs.com/cloud795/p/10018053.html

时间: 2024-10-31 07:36:37

2018-2019-1 20165228 《信息安全系统设计基础》第八周学习总结的相关文章

信息安全系统设计基础第八周学习总结

第十章 系统级I/O 怎样学习系统编程(利用Linux学习Linux编程) 一.Unix I/O 一个Unix文件就是一个m字节的序列:B0,B1,B2,…,Bk,…,Bm-1 二.打开和关闭文件 1.进程通过调用open函数来打开一个已存在的文件或者创建一个新文件的: Int open(char *filename, int flags, mode_t mode); 2.通过调用close函数关闭一个打开的文件: Int close(int fd); 三.读和写文件 1.分别调用read和wr

信息安全系统设计基础第八周学习总结-吕松鸿

第10章 系统级I/O I/O:在主存和外部设备之间拷贝数据的过程. 10.1Unix I/O 一个Unix文件就是一个m个字节的序列: B0,B1,B2…Bk…B(m-1) 1.所有的输入输出都能以一种统一且一致的方式来执行: (1)打开文件 a.描述符:内核返回一个小的非负整数,它在后续对此文件的所有操作中标识这个文件. b. Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0).标准输出(描述符为1).标准错误(描述符为2). (2)改变当前的文件设置. (3)读写文

信息安全系统设计基础第八周学习笔记

系统级I/O 前言:输入/输出是在主存和外部设备(如磁盘驱动器.终端和网络)之间拷贝数据的过程.输入操作时从I/O设备拷贝数据到主存,而输出操作时从主存拷贝数据到I/O设备. 10.1  Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,B2,B3...Bk...Bm-1. 所有的I/O设备,如网络.磁盘盒终端,都被模型化为文件,而所有的输入和输出都被当做对相应的文件的读和写来执行.这是一种应用接口,成为Unix I/O. ①打开文件:一个应用程序通过要求内核打开相应地文件,

2018-2019-1 20165228 苏祚堃《信息安全系统设计基础》第一周学习总结

2018-2019-1 20165228 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 GCC编译: 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp 编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl 汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as 链 接:gcc hello.o –o hello ;gcc -o 调用ld 带head.h的头文件编译:需要使用"-I +

2018-2019-1 20165228 《信息安全系统设计基础》第二周学习总结

2018-2019-1 20165228 <信息安全系统设计基础>第二周学习总结 教材学习内容总结 信息=位+上下文 无符号编码:基于传统的二进制表示法,表示大于等于零的数字 补码编码:表示有符号数证书最常见的方式,可表示或正或负的数字 浮点数编码:表示实数的科学计数法的以二为基数的版本 溢出:计算机的表示法是用有限数量的位来对一个数字编码,当结果太大以至不能表示时,某些运算就会溢出 信息的存储 1个字节为8位,大多数计算机将1个字节作为最小的可寻址的存储器单位. 机器级程序将存储器视为一个非

20145216 史婧瑶《信息安全系统设计基础》第一周学习总结

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

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

20145311 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 常用的部分命令 CTRL+SHIFT+T:新建标签页,编程时有重要应用: ALT+数字N:终端中切换到第N个标签页,编程时有重要应用: Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成: CTRL+C:中断程序运行 Ctrl+D:键盘输入结束或退出终端 Ctrl+S: 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+A: 将光标移至输入行头,相当于Home键 Ctrl+E

20145216史婧瑶《信息安全系统设计基础》第九周学习总结

20145216史婧瑶<信息安全系统设计基础>第九周学习总结 教材内容总结 第十章 系统级I/O 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. 第一节 Unix I/O 这一节涉及到操作系统的基本抽象之一--文件.也就是说,所有的I/O设备都被模型化为文件,而所有的输入输出都被当做对相应文件的读/写.相关的执行动作如下: 1.打开文件: 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有

20145311 《信息安全系统设计基础》第二周学习总结

20145311 <信息安全系统设计基础>第二周学习总结 教材学习内容总结 重新学习了一下上周的一部分命令:grep main wyx.c(grep的全文检索功能)ls > ls.txt :ls内容输出到文本find pathname -mtime -n/+nfind -size -n/+n (find的功能还是比较强大) 简单地学习了一下vim编辑器,跟着vimtutor简单地学了一些,在linux bash中使用vim能够极大地提高效率, vim的用法比较多,只学习了其中简单的一部分

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

20145339顿珠达杰<信息安全系统设计基础>第一周学习总结 ◆ Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 物理机系统上可以通过使用[Ctrl]+[Alt]+[F1]-[F6]进行终端和图形界面切换,在线实验环境中按下[Ctrl]+[Alt]+[F7]来完成切换.普通意义上的 Shell 就是可以接受用户输入命令的程序,Unix/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的