1.复习进程
1.1 4G内存如何分配?
1.2 哪些是在内核模式进行分配的?
1.3 用户模式
1.4 空指针模式
1.5 进程间通信的方式
- 1.管道:通常指无名管道,是 UNIX 系统IPC最古老的形式。
- 1.是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端;
- 2.只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间);
- 3.可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数;但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
- 2.FIFO:命名管道,是一种文件类型。
- 1.可以在无关的进程之间交换数据;
- 2.有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。
- 3.消息队列:是消息的链接表,存放在内核中;一个消息队列由一个标识符(即队列ID)来标识。
- 1.消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级;
- 2.消息队列独立于发送与接收进程;进程终止时,消息队列及其内容并不会被删除;
- 3.消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
- 4.信号量:是一个计数器,用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
- 1.用于进程间同步,若要在进程间传递数据需要结合共享内存;
- 2.基于操作系统的 PV 操作,程序对信号量的操作都是原子操作;
- 3.每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数;
- 4.支持信号量组。
- 5.共享内存:指两个或多个进程共享一个给定的存储区。
- 1.共享内存是最快的一种 IPC,因为进程是直接对内存进行存取;
- 2.因为多个进程可以同时操作,所以需要进行同步;
- 3.信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。
- 6.剪贴板
- 7.套接字
- 8.动态库
- 9.文件映射
- 10.事件
2.复习线程
2.1 什么是线程
- 是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位。
2.2 并发和并行
- 并发:多个程序在同一个CPU上进行运行,CPU会将时间片划分为若干个,交替运行程序;
- 并行:多个线程在多个CPU上执行,相互之间不抢占CPU资源。
2.3 判断:两个线程在单核CPU上并行
2.4 线程的内核对象
2.5 线程栈
2.6 线程的基本状态
- 1.就绪:就绪没法到达阻塞状态
- 2.阻塞:阻塞不能直接到达运行状态
- 3.运行:运行与就绪可以相互转换
2.7 线程间通信:两个基本问题是互斥和同步
- 1.同步:事件(协同)、信号量、互斥量(与关键代码段相比,关键代码段能够控制锁的时间因此更加安全)、临界区
- 2.互斥:原子访问(只能锁一个变量)、关键代码段(锁一段代码)、
2.8 线程池
3.复习内存管理
3.1 创建完线程后分配内存空间
3.2 现在都是非连续的空间分配,有页式管理、段式管理和段页式管理。
4.复习库
4.1 静态库 动态库 :预先加载资源
4.2 项目小则使用静态库,项目大则使用动态库
5.复习网络
5.1 OSI七层传输协议(从下到上依次为)
- 1.物理层:是参考模型的最低层,是网络通信的数据传输介质,由连接不同结点的电缆与设备共同构成。
- 主要功能:利用传输介质为数据链路层提供物理连接,负责处理数据传输并监控数据出错率,以便数据流的透明传输。
- 2.数据链路层:四参考模型的第二层。
- 主要功能:在物理层提供的服务基础上,在通信的实体间建立数据链路连接,传输以“帧”为单位的数据包,并采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路。
- 3.网络层
- 主要功能:为数据在节点之间传输创建逻辑链路,通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互连等功能。
- 4.传输层
- 主要功能:向用户提供可靠地端到端服务,处理数据包错误、数据包次序,以及其他一些关键传输问题;传输层向高层屏蔽了下层数据通信的细节;因此,它是计算机通信体系结构中关键的一层。
- 5.会话层
- 主要功能:负责维扩两个结点之间的传输连接,以便确保点到点传输不中断,以及管理数据交换等功能。
- 6.表示层
- 用于处理在两个通信系统中交换信息的表示方法,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
- 7.应用层
- 为应用软件提供了很多服务,比如文件服务器、数据库服务、电子邮件与其他网络软件服务。
5.2 TCP/IP四层协议
- 1.网络接口层(五层中的物理层和数据链路层进行了合并)
- 2.网络层
- 3.传输层
- 4.应用层
5.3 TCP/IP会引起粘包
- 1.粘包的原因
- 1.要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包;
- 2.待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包;
- 3.要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;
- 4.接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
- 2.解决方法
- 1.发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了;
- 2.发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来;
- 3.可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。
5.4 FeiQ项目
5.5 TCP与UDP的区别
- 1.TCP传输的是数据流,UDP传输的是数据报文;
- 2.UDP可以一对多,TCP是面向对象连接(三次握手与四次挥手);
- 3.UDP传送速度快,但是会丢包;TCP传输速度慢,但是不会丢包;
- 4.TCP能够重传校验;
5.6 IO模型
- 1.阻塞与非阻塞:
- 2.同步与异步:在POSIX定义中把同步IO操作定义为导致进程阻塞直到IO完成的操作,反之则是异步IO。
6.直播项目
6.1 分为三块
6.2 数据库底层存储是B树
6.3 项目的功能
- 1.注册、登陆
- 2.客户端选择
- 3.主播设置房间
- 4.主播设置声卡、视频
- 5.设置禁用
6.4 架构服务器
- 1.Net基类:包括 初始化网络 、 关闭网络 、 收发数据 TCPNet UDPNet
- 2.Kernel基类:包括 启动服务器 、 关闭服务器 、 处理数据 TCPKernel UDPKernel
- 3.MySQL类
参考:
https://blog.csdn.net/wh_sjc/article/details/70283843