程序员的自我修养(第一章)
来源:互联网 发布:人工智能豆瓣评分 编辑:程序博客网 时间:2024/05/16 12:11
内存不够怎么办?
首先实现的是分页机制,即只在物理内存中保存进程常用的数据,而其他的放在硬盘中。
关于隔离:
进程作为普通的运行程序,需要的是简单的执行环境和单一的地址空间。这里就出现了虚拟地址空间,然后统一由MMU内存管理单元进行统一映射,而这个管理单元是同页表的方式进行映射的,这个页表放在物理内存中。
关于线程:
线程间的调度方式主要有优先级调度和轮转法。
在具有优先级调度的时候,每个线程都具有优先级,系统会根据线程的表现自动调整优先级。然而在优先级调度下,存在一种饿死的情况,就是说某个线程的优先级一直很低,导致不被运行,操作系统处理的方式是只要线程等待了足够长的时间,其优先级会被自动提高。
Linux进程 fork():
fork()会复制当前进程,其速度非常快,并且一般与exec()合用。速度快主要依靠的是写时复制:
所谓写时复制:就是说两个进程可以同时自由的读取内存,但是任意一个进程试图读对内存进行修改时,内存就会复制一份提供给修改方单独使用。注意:只有发生修改的时候,才会写。这样就减少了内存的压力。
同步与锁:
线程同步的最好的办法就是锁,锁的种类:
1.二元信号量:只有两种状态:占用和非占用。一个初始值为N的信号量允许N个线程并发访问。操作如下:
将信号量-1
如果信号量为0,则等待,否则继续;
访问之后,释放;
将信号量+1;
如果信号量的值<1,唤醒一个等待的线程。
2.互斥量:资源也只能被一个线程同时访问。不同的是:二元信号量可以被这个线程访问,然后被另一个释放。而互斥量要求哪个线程获取了互斥量,哪个线程就负责释放这个锁。
3.临界区:比互斥量更严格。之前的信号量在系统的任何进程是可见的,也就是说,一个进程创建了互斥量,另一个进程是可以获取该锁的。而临界区的方位仅仅限于本进程,其他的进程无法访问。
4:读写锁:致力于特定场合同步。多线程读的时候,单线程偶尔写的时候。
有两种锁的方式:共享和独占。
5.条件变量:线程可以等待条件变量,一个条件变量可以被多个线程所等待;线程也可以被唤醒,此时所有等待的条件变量的线程都会被唤醒。
- 程序员的自我修养(第一章)
- 程序员的自我修养—第一章
- 程序员的自我修养笔记第一章
- 程序员的自我修养读书笔记:第一章
- 《程序员的自我修养》第一章笔记
- 程序员的自我修养第一章总结
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- 程序员的自我修养
- SVM算法
- POJ 1384 Piggy-Bank (ZOJ 2014 Piggy-Bank) 完全背包
- Learning Cocos2d-x for XNA(1)——小窥cocos2d-x框架
- LIOP特征
- 代理服务器 Squid
- 程序员的自我修养(第一章)
- 无线局域网技术概述(Wireless LANs)——802.11协议
- PHP学习系列之文件上传
- arm学习笔记005之Linux平台下TFTP服务器构建
- Android 3.0以前版本使用Fragment提示getFragmentManager is undefined
- Binary Tree Level Order Traversal II
- 数据结构与算法系列-队列-队列的链式存储
- java装箱图解
- 感悟和读书笔记20131110