• 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

  • 相关阅读:
    云图说 | GPU共享型AI容器,让AI开发更普及
    手把手带你写Node.JS版本小游戏
    一个银行客户经理的“变形记”
    大厂运维必备技能:PB级数据仓库性能调优
    软件工程开发之道:了解能力和复杂度是前提
    大数据管理:构建数据自己的“独门独院”
    结构体与共用体05 零基础入门学习C语言57
    结构体与共用体04 零基础入门学习C语言56
    PE格式详细讲解1 系统篇01|解密系列
    初步认识PE格式 基础篇06|解密系列
  • 原文地址:https://www.cnblogs.com/ljq007/p/6160911.html
Copyright © 2020-2023  润新知