- Linux常用指令
- ls cd pwd rm -rf sudo chomd mkdir touch cat vim ip addr mv cp tar kill -name -9 ps -aux
- 静态库和动态库如何制作和使用
- 进程的调度算法
- 先来先服务
- 短作业优先
- 优先级
- 时间片轮转
- 多级反馈
- 高响应
- 进程通信的方法
- 管道
- 共享内存
- 内存映射
- Socket
- 消息队列
- 信号
- 信号量
- 进程的状态:
- 线程间的通信方式
- 进程和线程的区别
- 进程是资源分配最小的基本单位
- 线程的CPU调度的基本单位
- 进程的切换效率慢,线程 的切换效率高
- 进程的上下文切换需要做的事:现场运行环境的保存、CPU寄存器、程序计数器、用户之间的信息、内核空间
- 线程的切换:
- 如果是不同线程之间的通信则和进程一样:现场运行环境的保存,CPU寄存器、程序计数器、用户之间信息、内核信息
- 如果同以进程下的线程切换:只需保存 CPU寄存器和程序计数器
- 进程有独立的虚拟地址空间
- 线程没有独立的虚拟地址空间,但有栈、PC、本地存储等
- 一个 进程可以拥有多个线程,一个线程只属于一个进程
- 进程的健壮性好,进程和进程间不干扰(类似微内核)一个进程的崩溃不会影响到其他进程,进程具有隔离性
- 但是线程崩溃会导致进程崩溃
- 协程和线程的区别 协程和进程的区别
- 从属:一个线程包含多个协程,一个进程包含多个线程
- 进程和线程的切换都是操作系统,协程的切换是由程序决定的
- 进程的切换包括了用户之间的信息,CPU寄存器、程序计数器、内核信息、现场运行的环境内容都在内存中
- 协程的切换包含核栈,硬件上下文,切换的内容保存在内核栈中
- 协程的切换 的开销小于线程切换的开销
- 协程的切换效率高
- 写时拷贝
- 常用的GDB调试工具
- 设置断点
- 使程序在指定的位置停止运行,便于观察
- 单步执行程序,便于观察
- 查看程序中变量的变化
- 动态改变程序的执行环境
- 分析崩溃程序所产生的core文件
- r 重新运行 start 单步执行
- list (l) 查看源代码 list -n 在第几行开始查看代码 list+ 函数名 查看具体函数
- set 设置变量的值
- next (n)单步调试 逐过程
- setp ( s )单步调试 逐语句
- backtrance 查看函数的调用的堆栈以及层级的关系
- frame f 切换函数的堆栈
- indo 查看函数内部局部变量的数值
- p 打印 q 退出 c 继续执行 b -num 在何处打断点 等等
- 共享内存
- 原理:进程间通信的一种方法,不同的进程之间共享的内存通常为同一段物理内存,进程可以将同一段物理内存连接到他们的地址空间中,所有的进程都可以访问共享内存中的 地址,如果某一个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程
- 优点:因为所有的进程共享同一块内存,所以共享内存在各个进程中通信的具有最高的效率,访问共享内存的速度与访问字节独有的 内存区域一样块,不需要通过系统调用或者其他切入内核的过程来完成,也避免了对数据的不必要复制
- 缺点:共享内存没有同步进制,共享内存并不支持阻塞等操作,写入和读出都是同时访问:全双工、可以利用管道来添加阻塞的设置:在读端前面写入管道的读端,在写端后面写上管道的写端,这样当写端写入时,会触发管道的写段写入数据,这时读端就因为管道阻塞而无法读取到到数据达到阻塞效果、当写端写完后读端才会停止阻塞, 进行读端、、、
- 虚拟内存与物理内存
- 虚拟内存为:栈区、堆区、数据区、代码区
- 栈区保存的时函数的参数,以及局部遍历
- 堆区存放用户动态分布的内存
- 数据区存放全局变量以及静态变量
- 代码区中还有字符串常量区等,存放等号右边的数据,以及可执行的代码块
计算机网络TCP/IP
- TCP 和UDP的区别
- TCP和UDP的使用场景
- TCP的可靠传输
- UDP的可靠传输
- TCP的三次握手四次挥手以及各种状态CLOSE_WAIT TIME_WAIT