2017-2018-1 20155223 《信息安全系统设计基础》第8周学习总结
教材学习内容总结
进程
进程是靠内核自动调度实现的,而且因为他们有各自的独立的虚拟地址空间,所以要在各个进程内实现共享数据,必须要有显式的IPC机制。事件驱动程序创建它们自己的并发逻辑流,这些逻辑流被模型化成状态机,用I/O多路复用来显式地角度这些流。
进程的特性有:
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和进程控制块三部分组成。
多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。
负责调度的算法有:FIFS(先到先得原则)、短进程优先算法、最短剩余时间优先算法等。
线程
线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
线程有两种。一种是用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。另外一种是核心级线程:由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行、撤消线程。
线程与进程的不同:
地址空间和其它资源:线程相互独立,同一进程的各线程间共享;某一进程内的所有线程在其他进程内不可见。
通信:线程依靠通信IPC;进程可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助。
调度和切换:线程快,进程慢。
在多线程OS中,进程不是一个可执行的实体。
I/O多路复用
通过I/O多路复用技术,系统内核缓冲I/O数据,当某个I/O准备好后,系统通知应用程序该I/O可读或可写,这样应用程序可以马上完成相应的I/O操作,而不需要等待系统完成相应I/O操作,从而应用程序不必因等待I/O操作而阻塞。
与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。
教材学习中的问题和解决过程
- 问题1:C语言中的I/O和Java编程语言的I/O有什么不同?
- 问题1解决方案:通过查询我了解到了C语言的I/O依靠的是stdio.h内的函数实现,而Java的I/O是依靠大量的类和流类型实现的。C语言的I/O适合底层的编码活动,而Java的I/O适合高层软件间的交流。
代码调试中的问题和解决过程
- 问题1:来自实现时间查询服务器:服务器一直在输出一个固定时间:1970年1月1日星期四,08:00。
- 问题1解决方案:在代码段内添加t = time(NULL);来获取计算机本机时间。
- 问题2:来自实现时间查询服务器:无论有多少个终端去向服务器查询时间,都只得到一个固定的时间。
- 问题2解决方案:将代码t = time(NULL);放置到接受到询问的部分,而不是在代码段首部。这样一来,服务器就会在回复在客户端询问时的计算机时间,而不是回复服务器启动那时的时间。(粗心……)
代码托管
上周考试错题总结
- 上周没考试。
其他(感悟、思考等,可选)
期待用C语言编硬件I/O的编程,希望不是乌鸦嘴。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 31/31 | 1/1 | 20/20 | |
第三周 | 24/55 | 2/3 | 24/44 | 知道浮点数怎么储存的 |
第四周 | 177/328 | 2/5 | 17/61 | 现在我的C语言程序也会在Linux命令行下使用了:*) |
第五周 | 54/382 | 2/7 | 18/79 | 复习一遍汇编语言 |
第七周 | 2360/2722 | 1/8 | 12/91 | |
第八周 | 624/3344 | 2/10 | 19/110 | 了解多线程和多进程 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:15小时
-
实际学习时间:19小时
-
改进情况:
学会鞥多的进程编码和线程编码的原理。