zoukankan      html  css  js  c++  java
  • 20145303 《信息安全系统设计基础》第13周学习总结

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

    教材学习内容总结

    •一个应用是由一个服务器进程和一个或者多个客户端进程组成的
    •一个客户端-服务器事务由四步组成:
    (1)当一个客户端需要服务时,向服务器发送一个请求,发起一个事务
    (2)服务器收到请求后,解释它,并以适当的方式操作它的资源
    (3)服务器给客户端发送一个相应,并等待下一个请求
    (4)客户端收到响应并处理它
    •物理上,网络是一个按照地理远近组成的层次系统:最低层是LAN(局域网),迄今为止,最流行的局域网技术是以太网
    •在层次较高的级别中,多个不兼容的局域网可以通过路由器连接起来,组成互联网络
    •协议提供的两种基本能力:
    命名机制:每台主机会被分配至少一个这种互联网地址,该地址唯一的标示一台主机。
    传送机制:定义一种把数据位捆扎成不连续的片的统一方式
    •因特网的客户端和服务器混合使用套接字接口函数和UnixI/O函数进行通信
    •TCP/IP实际上是一个协议族
    •套接字接口是一组函数,用以创建网络应用
    •socket函数:客户端和服务端使用socket函数来创建一个套接字描述符
    •connect函数:建立和服务器的连接
    •open_clientfd函数:将socket和connect函数包装而成。客户端可以用它来和服务器建立连接
    •Web客户端和服务器之间的交互用的是一个基于文本的应用级协议,叫做 HTTP (Hypertext Transfer Protocol,超文本传输协议)
    •HTTP 是一个简单的协议。一个 Web 客户端(即浏览器) 打开一个到服务器的因特网连接,并且请求某些内容。服务器响应所请求的内容,然后关闭连接。浏览器读取这些内容,并把它显示在屏幕上
    •Web 服务器以两种不同的方式向客户端提供内容:
    (1)取一个磁盘文件,并将它的内容返回给客户端。磁盘文件称为静态内容,而返回文件给客户端的过程称为服务静态内容
    (2)运行一个可执行文件,并将它的输出返回给客户端。运行时可执行文件产生的输出称为态内容,而运行程序并返回它的输出到客户端的过程称为服务动态内容
    •只要逻辑控制流在时间上重叠,那么就可以称为并发
    •三种基本的构造并发程序的方法:
    (1)进程:用内核来调用和维护,有独立的虚拟地址空间,显式的进程间通信机制。
    (2)I/O多路复用:应用程序在一个进程的上下文中显式的调度控制流。逻辑流被模型化为状态机。
    (3)线程:运行在一个单一进程上下文中的逻辑流。由内核进行调度,共享同一个虚拟地址空间。
    •构造并发服务器的自然方法就是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务
    •因为父子进程中的已连接描述符都指向同一个文件表表项,所以父进程关闭它的已连接描述符的拷贝是至关重要的,而且由此引起的存储器泄露将最终消耗尽可用的存储器,使系统崩溃
    •如果服务器要既能相应客户端的连接请求,又能响应用户的键盘输入,那么会产生等待谁的冲突。使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生之后,才将控制返回给进程
    •状态机就是一组状态、输入事件和转移,转移就是将状态和输入时间映射到状态,自循环是同一输入和输出状态之间的转移
    •线程与进程的不同:
    (1)线程的上下文切换要比进程的上下文切换快得多
    (2)和一个进程相关的线程组成一个对等池,独立于其他线程创建的线程
    (3)主线程和其他线程的区别仅在于它总是进程中第一个运行的线程
    •线程例程:线程的代码和本地数据被封装在一个线程例程中
    •一个分离的线程是不能被其他线程回收或杀死的。它的存储器资源在它终止时由系统自动释放
    •进度图是将n个并发线程的执行模型化为一条n维笛卡尔空间中的轨迹线,原点对应于没有任何线程完成一条指令的初始状态
    •信号量是具有非负整数值的全局变量,只能由两种特殊的操作来处理,这两种操作称为P和V
    •信号量不变性:一个正在运行的程序绝不能进入这样一种状态,也就是一个正确初始化了的信号量有一个负值
    •二元信号量:将每个共享变量与一个信号量联系起来,然后用然后用P(S)和V(s)操作将这种临界区包围起来,这种方式来保护共享变量的信号量
    •竞争:当一个程序的正确性依赖于一个线程要在另一个线程到达y点之前到达它的控制流中的x点时,就会发生竞争
    •死锁:一组线程被阻塞了,等待一个永远也不会为真的条件

    代码实践

    •condvar
    mutex用于保护资源,wait函数用于等待信号,signal函数用于通知信号
    调用了pthread,gcc编译的时候要加上-lpthread

    •count
    不加锁的创建两个线程共享同一变量都实现加一操作

    •countwithmutex
    引入互斥锁

    •cp_t
    用法:./cp_t [源文件名] [目的文件名] [创建线程数]

    •createthread
    打印进程和线程ID

    •semphore

    •share
    获得线程的终止状态

    •threadexit

    •hello_multi

    •hello_multi1

    •hello_single

    •incprint

    •twordcount1
    统计文件1及文件2两个文件的总字数

    •twordcount2

    •twordcount3
    分别对文件1、文件2两个文件进行字数统计,并把两个文件的字数加起来统计两个文件的总字数

    •twordcount4
    分别运行代码,根据锁的情况分别统计字数,再把两个文件的字数加起来统计两个文件的总字数

    代码链接:

    https://git.oschina.net/LJQ5303/Linux-code.git

  • 相关阅读:
    15. DML, DDL, LOGON 触发器
    5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
    4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
    14. 类似正则表达式的字符处理问题
    01. SELECT显示和PRINT打印超长的字符
    3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
    2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果
    1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式
    0. 跟踪标记 (Trace Flag) 简介
    SpringBoot + Redis + Shiro 实现权限管理(转)
  • 原文地址:https://www.cnblogs.com/ljq007/p/6160911.html
Copyright © 2011-2022 走看看