这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战
一、进程的五种状态
- 【R】TASK_RUNNING 运行中;
- 【S】TASK_INTERRUPTIBLE 可中断的睡眠状态:如等待 socket 连接,等待信号量;
- 【D】TASK_UNINTERRUPTIBLE 不可中断的睡眠状态:如等待 IO;
- 【Z】TASK_DEAD - EXIT_ZOMBIE / 僵死:已终止,但进程描述符仍存在,直到父进程调用wait4() 后释放;
- 【T】TASK_STOPPED / TASK_TRACED 暂停/跟踪状态:如收到 SIGSTOP,SIGKILL 信号后停止运行;
二、虚拟内存
- 作为磁盘与主存之间的缓冲区,将磁盘上的空间当作内存使用;
- 为每个进程提供一致的地址空间,保护每个进程的地址空间不被其他进程破坏;
1. 内核虚拟内存
- 全局的数据结构;
- 存在于物理内存;
- 存放内核代码和数据;
2. 进程虚拟内存
- 共享内存;
- 运行时堆(由 malloc 分配);
- 未初始化的数据以 .bss 结尾;
- 已初始化的数据以 .data 结尾;
- 存放用户代码和数据;
3. 常用工具
# 查看进程资源占用
top / ps
# 查看应用运行情况,是否有内存泄漏
pprof / runtime.MemStats
# 查看进程的内存映射情况
vmmap
# MacOS 查看程序的系统调用情况,分析进程可疑行为
dtruss
三、swap
- 本质:硬盘上划分的一个区域;
- 工作原理:内存不够时,会转存一部分到 swap 区;
- 优点:磁盘空间当内存用,扩大物理内存;
- 缺点:不断读写 swap 区会影响性能;
- 应用场景:内存不足;
四、软硬链接
1. 硬链接
- 文件有 相同 的 inode 及 data block;
- 只能对 已存在 的文件创建;
- 不能交叉 文件系统创建;
- 多个硬链接可以 关联同一个 inode,删除其中一个 不影响 另外的;
2. 软链接
- 就是一个普通文件,仅数据块内容有点特殊;
- 有自己的 inode 号以及用户数据块;
- 有自己的文件属性及权限等;
- 可对 不存在 的文件或目录创建;
- 可以交叉 文件系统创建;
- 创建后不增加 i_nlink 链接计数;
- 删除时 不影响 被指向的文件(等同于 windows 的快捷方式);