- 虚拟内存的作用?
- 虚拟内存的实现?
- 操作系统层面对内存的管理?
- 内存池的作用?STL里[内存池如何实现]
- 进程空间和内核空间对内存的管理不同?
- Linux的slab层,VAM?
- 伙伴算法
- 高端内存
9.Linux进程分为两种,实时进程和非实时进程;
10.优先级分为静态优先级和动态优先级,优先级的范围;
11.调度策略
12.交互进程通过平均睡眠时间而被奖励;
13.死锁:
(1) 死锁产生的条件;
请求并占有,不可剥夺,资源有限,环路等待
(2) 死锁的避免;
fork与vfork区别
fork创建进程是从父进程复制一个进程,然后将父进程的地址空间一页一页的复制给创建的进程。
vfork创建进程是和父进程共享内存空间
exit()与_exit()区别
1._exit()执行后会立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核。
2.调用_exit()函数时,其会关闭进程所有的文件描述符,清理内存,以及其他一些内核清理函数,但不会刷新流(stdin 、stdout、stderr……)。exit()函数是在_exit()函数上的一个封装,它会调用_exit,并在调用之前先刷新流。
3.exit()函数与_exit()函数最大的区别就在于,exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区的内容写回文件。
注:由于Linux的标准函数库中,有一种操作称作“缓冲I/O”的操作,其特征就是对应每一个打开的文件,在内存中都有一片缓冲区。在每次读文件时,会连续地读出若干条记录,这样在下次读文件时就可以直接从内存的缓冲区读取;同样,在每次写文件时也仅仅是写入内存的缓冲区,等满足了一定的条件(如达到了一定数量或遇到特定字符等),再将缓冲区中的内容的内容一次性写入文件。这种技术大大提高了文件读写的速度,但也给编程带来了一点麻烦。例如,有一些数据,认为已经写入了文件,实际上因为没有满足特定的条件,它们只是保存在缓冲区内,这时用_exit()函数直接将进程关闭,缓冲区的数据将丢失。因此,要想保证数据的完整性,就一定要使用exit()函数。
孤儿进程与僵死进程
https://www.cnblogs.com/wannable/p/6021617.html
孤儿进程是怎么产生的?
僵死进程是怎么产生的?
https://blog.csdn.net/zjwson/article/details/53321431
僵死进程的危害?
如何避免僵死进程的产生?
(1) 让僵尸进程成为孤儿进程,由init进程回收;(手动杀死父进程)
(2) 调用fork()两次;
(3) 捕捉SIGCHLD信号,并在信号处理函数中调用wait函数;
Linux是如何避免内存碎片的
https://blog.csdn.net/aurorayqz/article/details/79671785
伙伴算法,用于管理物理内存,避免内存碎片;
高速缓存Slab层用于管理内核分配内存,避免碎片。
CFS调度算法:
https://www.cnblogs.com/tianguiyu/articles/6091378.html
对VFS的结构很喜欢考:
http://blog.jobbole.com/105537/
解释软链接和硬链接(从inode和dentry去解释)
linux文件缓存,IO调度算法
Linux这里也喜欢问内存,slab,slub,伙伴算法,进程内存空间,线程内存空间等等。在系统编程层次主要考察各种IO系统调用、进程相关的系统调用、socket编程。然后把这些系统调用对应到进程生命周期和进程间通信的各个阶段去考。还会考查高级IO操作,IO多路复用,poll,epoll等等,AIO,零拷贝。
另外就是Linux的各种使用命令等等,都是常用命令,sed,grep,top这种。