Linux内核overview
内核---->外包公司
系统调用子系统----->办事大厅----->请求资源的统一入口
进程管理子系统----->项目管理系统---->对执行中的项目进行生命周期的管理
内存管理子系统----->会议室管理系统---->对执行中的项目会议室管理(隔离,分配,回收)
文件子系统----->档案管理系统----->对执行项目使用的文档资料进行管理
设备子系统----->客户对交人员----->对项目的输入输出进行管理
网络子系统----->对外合作部门----->跟其他公司沟通合作
Linux基础命令行
Linux基础系统调用
进程管理:
立项服务===创建进程===fork===
子进程返回0 父进程返回子进程ID===父进程:继续原来的事情,子进程:请求execve来执行另一个程序===
程序猿策略:先拷贝,在修改
内存管理:
每个项目独立的会议室===进程内存空间
项目计划书===代码段
会议产生数据图纸===数据段
会议数据存放===栈 堆 (上,下)
写时复制:只有真的写入数据的时候,发现没有对应物理内存,才回触发一个中断,现分配物理内存
brk===分配内存数量比较小的时候,和原来数据连在一起===原来区域旁边搬两把椅子
mmap===会重新划分一整块区域===原来办公场地小,搬到大的
文件管理:
档案库管理===一切皆文件
项目异常处理====信号处理
当项目组收到信号的时候,项目组需要决定如何处理这些异常情况。
忽略 执行默认动作 自定义信号处理函数(sigaction系统调用)
项目组间沟通===进程间通信
首先就是发个消息,不需要一段很长的数据,这种方式称为消息队列:
msgget创建新队列----->msgsend将消息发送到队列----->msgrcv消息接收方获取
交互信息比较大的时候,共享内存:
shmget创建一个共享内存块----->shmat映射到自己内存空间读写
但是,两个项目组共同访问一个会议室里的数据,就会存在“竞争”:信号量(灯)
公司间沟通===网络通信
不同机器的通过网络相互通信,要遵循相同的网络协议,也即TCP/IP网络协议栈