zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155210 《信息安全系统设计基础》第八周学习总结

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

    进程、线程、I/O多路复用

    进程:

    • 进程定义:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程是靠内核自动调度实现的,而且因为他们有各自的独立的虚拟地址空间,所以要在各个进程内实现共享数据,必须要有显式的IPC机制。事件驱动程序创建它们自己的并发逻辑流,这些逻辑流被模型化成状态机,用I/O多路复用来显式地角度这些流。

    • 进程的特性有:

    动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。

    并发性:任何进程都可以同其他进程一起并发执行

    独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;

    异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

    结构特征:进程由程序、数据和进程控制块三部分组成。

    • 负责调度的算法有:FIFS(先到先得原则)、短进程优先算法、最短剩余时间优先算法等。

    线程:

    • 线程定义:线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

    • 线程种类: 线程有两种。一种是用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。另外一种是核心级线程:由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行、撤消线程。

    • 进程与线程区别:

    (1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

    (2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

    (3)调度和切换:线程上下文切换比进程上下文切换要快得多。

    (4)在多线程OS中,进程不是一个可执行的实体。

    I/O多路复用:

    • 通过I/O多路复用技术,系统内核缓冲I/O数据,当某个I/O准备好后,系统通知应用程序该I/O可读或可写,这样应用程序可以马上完成相应的I/O操作,而不需要等待系统完成相应I/O操作,从而应用程序不必因等待I/O操作而阻塞。
      与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

    • I/O复用典型的应用:

    (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。

    (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。

    (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。

    (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。

    (5)如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。

    线程同步互斥相关系统调用

    初始化:

    在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化:

    对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init。

    对于动态分配的互斥量, 在申请内存(malloc)之后, 通过pthread_mutex_init进行初始化, 并且在释放内存(free)前需要调用pthread_mutex_destroy。

    返回值:成功则返回0, 出错则返回错误编号。

    说明:如果使用默认的属性初始化互斥量, 只需把attr设为NULL。

    死锁:

    死锁主要发生在有多个依赖锁存在时,会在一个线程试图以与另一个线程相反顺序锁住互斥量时发生。如何避免死锁是使用互斥量应该格外注意的东西。

    总体来讲, 有几个基本原则:

    对共享资源操作前一定要获得锁。

    完成操作以后一定要释放锁。

    尽量短时间地占用锁。

    如果有多锁,如获得顺序是ABC连环扣,释放顺序也应该是ABC。

    线程错误返回时应该释放它所获得的锁。

    在编译中要加 -lpthread参数。

    教材学习中的问题和解决过程

    (一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )

    • 问题1:C语言中的I/O和Java编程语言的I/O有什么不同?
    • 问题1解决方案:通过查询我了解到了C语言的I/O依靠的是stdio.h内的函数实现,而Java的I/O是依靠大量的类和流类型实现的。C语言的I/O适合底层的编码活动,而Java的I/O适合高层软件间的交流。
    • 问题2:PID有什么作用或意义
    • 问题2解决方案:PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收,可能会被继续分配给新运行的程序。

    PID一列代表了各进程的进程ID,也就是说,PID就是各进程的身份标识。

    只要运行一程序,系统会自动分配一个标识。

    是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。

    只要没有成功运行其他程序,这个pid会继续分配给当前要运行的程序。

    如果成功运行一个程序,然后再运行别的程序时,系统会自动分配另一个pid。

    代码调试中的问题和解决过程

    • 问题1:XXXXXX
    • 问题1解决方案:XXXXXX
    • 问题2:XXXXXX
    • 问题2解决方案:XXXXXX
    • ...

    代码托管

    (statistics.sh脚本的运行结果截图)

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 代码中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 其他

    本周结对学习情况

    - [结对同学学号1](博客链接)
    - 结对照片
    - 结对学习内容
        - XXXX
        - XXXX
        - ...
    

    其他(感悟、思考等,可选)

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第八周 / 3/14 12/132

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:12小时

    • 实际学习时间:20小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    java 接口的定义即实现
    进程的pv。。
    变量,常量,字符,字符串,数组的声明及初始化
    运算符重载
    数组大小的声明 1到100的素数
    第十二周助教总结(2021.4.192021.4.25)
    第十周助教总结(2021.4.52021.4.11)
    第十一周助教总结(2021.4.122021.4.18)
    助教周报(第一轮)王冰炜
    ThinkPHP3.1.2整合UCenter详解(一)
  • 原文地址:https://www.cnblogs.com/panyinghao/p/7821504.html
Copyright © 2011-2022 走看看