[6]开发一个Linux系统吧——一些其他的东西
进程安全
为了防止多进程或多线程同时对资源的调用而出现数据错误,内核提供了两种工作状态:同步和异步,同步就是按照一定顺序进行访问,异步就是系统控制进程何时访问
同时在为了资源安排合理的情况下,系统提供了锁,它可以保护自己在运行时不会受到其他线程的干扰。但是如果两个线程互相持有对方的资源,且无法释放,这样会出现死锁现象。死锁可以由以下原因引发:
- 资源抢夺导致的,如不可抢占或者资源消耗过多
- 进程运行顺序不当,申请顺序有误
为了避免死锁我们必须清楚的了解加锁顺序,先加的锁一定后解,后入的锁一定先开锁,同时注意释放锁的逻辑。
下面是一些提升并发能力的操作:
- 原子类型:使用了CAS的思想,可以不被调度机制打断
- 自旋锁:可以自动保护,如果有其他程序申请,必须等候到运行结束
- 信号量:发送结束信号,否则线程出于睡眠
- 互斥锁:仅允许两个程序进行争夺
这里说一下信号量,其他的都为各种语言的基础,信号量的使用需要PV操作:
- P:信号量值减一,若小于0,则进程阻塞,否则继续执行
- V:信号量值加一,若结果小于等于0,则释放进程,若大于0,则继续执行
操作信号量可以使用semget函数,他的头为:
1 |
|
时钟机制
每台计算机都会有一个时钟RTC。从单片机发展来看,时钟就是晶振一样的功能,提供给芯片完整的信息。
- RTC:提供实时时钟
- TSC:外部时钟信号
- PIT:中断时钟信号
- HPET:新的时钟,精度很高
- ACPI:控制CPU的频率
Linux为了控制时钟中断提供了两个变量,分别为xtime和Jiffies。xtime从cmos获取时间,为了获取操作系统的日期,也就是实时时钟,他的精度为us,使用time.h就可以获取了。jiffies可以获取启动到下载的时间,也可以记录时间的发生间隔,一般用作驱动系统的参考时间。
时钟的单位有两种,一种是Hz,这是最基础的时钟单位,另一种就是tick,他是Hz的倒数,表示一次震荡的时间。
SWAP
SWAP就是在外存中分配一个空间做内存,这种就是虚拟内存,可以当作RAM使用,如果运行一些需要内存较大的程序,就需要使用交换空间,所以一般内存大小都是RAM+SWAP,但是虚拟内存毕竟是虚拟内存,速度比内存肯定慢了很多,所以增加虚拟内存不是解决办法,而是添加内存。
总结
这样Linux内核就已经更新完成了,本期博文只负责查缺补漏,这里给出各期的传送门,可以一起看咯~
[6]开发一个Linux系统吧——一些其他的东西
https://blog.minloha.cn/posts/110722e000b8d22023020704.html