1、并发与并行
并发可能多个任务交替执行。并行是同时执行
2、用户态和内核态
- 当一个进程在执行用户自己的代码时处于用户态,(特权级最低3级)。
- 内核运行,特权级最高为0级。
- 3G~4G为内核地址空间。
- 用户态-->>内核态:系统调用、异常、外围设备的中断。
3、liunx软链接和硬链接。
- 硬链接:实际为文件建一个别名
- ls -i 查看两个文件时,inode号是同一个。
- ls -al 查看硬链接和原文件的文件类型
- ls -ai 显示文件的硬链接数量
- 硬链接只能用于文件,不能用于目录;
- 软链接可以为目录建链接。
- 软链接:建立一个指向,即链接文件内的内容是指向原文件的指针,它是两个文件。
- 文件A硬链接文件B、删除B后,A依然存在且可用。<随变删--指向同一个inode>
- 文件A软链接文件B、删除B后,A存在但不可用。
4、死锁发生的条件,如何解决死锁
- 互斥条件、
- 请求保持、
- 不可剥夺条件、
- 循环等待条件。
5、如何设计server,使其能够接收接收多个客户端的请求。
多线程、io多路复用、线程池
6、多线程与多进程之间的通信。
- IPC进程间的通信:
- a、进程间相互独立。内部资源(变量),别的进程不可见。
- b、由内核提供一份公共资源,让多个进程可以看见。
- c、条件:独立性、为了相互通信有共享资源。共享资源由操作系统内核实现。
进程创建:
fork() 进程,通过pid分辨父子进程getpid(), getppid()返回父进程的pid。
fork()创建的子进程是完全复制父进程的资源。实际开发中,fork出来的子进程一般会执行exec()方法调用其它程序。父进程执行顺序无法确定时,如果父进程先结束;子进程会被init进程接管,成为孤儿进程(很多应用利用这点创建守护进程)。
vfork()创建子进程,会阻塞父进程优先执行完。(共享父进程的资源)
exec函数族:传入可执行文件或路径 - a、execl、execlp、execlpe
- b、execv、execvp、execvpe
L:list,arg参数是一个序列
V:vector,arg参数是一个数组,并且最后一个元素为null
P:系统环境变量PATH
7、多线程的互斥与同步
互斥:两个线程不能同时访问公共资源的问题。
同步:A线程要等到B线程完成某一操作后再继续。
互斥锁(同步):mutex,是一种简单的加锁的方法,用来控制对共享资源的访问,互斥锁有两种操作。lock和unlock
特点:原子性(os保证)、唯一性(只能一个线程锁定一个互斥量)、非繁忙等待(A线程先锁定一个互斥量,B线程再去锁定,则B挂起直到A释放后B唤醒再锁定)。
条件变量(同步):自动阻塞一个线程,等待某条件发生为止,与互斥锁同时使用。可以睡眠等待某种条件出现。
实现:利用线程间共享的全局变量进行同步的一种机制。
原理:条件的检测是在互斥锁的保护下进行的。线程在改变状态前必须首先锁住互斥量。
流程:初始化、等待条件成立、激活条件变量、清除条件变量
读写锁(同步):
进程、线程、协程的区别?
进程:资源分配的最小单元,有独立的代码和数据空间。
线程:任务调度和执行的基本单元。
协程:用户态级的轻量级线程,相当于一个特殊的函数。一个物理线程可以拥有多个协程。
2、进程间通信方式?<信号、信号量、管道、Socket、共存内存、消息队列>
3、多线程同步方法? <互斥锁mutex、条件变量、信息量、读写锁rwlock>
4、死锁、如何解决死锁?
5、五种IO模型?阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO。
6、Linux虚拟内存地址空间的原理?虚拟内存的作用?虚拟内存和物理内存怎么对应?
7、操作系统中进程的常见状态转换?
8、程序在操作系统的内存布局?
9、进程状态转换图,动态就绪,静态就绪,动态阻塞,静态阻塞?
10、软链接和硬链接区别?
11、问什么是大端小端以及如何判断大端小端?
12、请你回答一下静态变量什么时候初始化?
13、用户态和内核态区别?
14、系统调用是什么,你用过哪些系统调用,和库函数有什么区别?
15、请你说一说操作系统中的缺页中断
16、请你回答一下fork和vfork的区别
17、请问如何修改文件最大句柄数?
18、请你说一说操作系统中的页表寻址
19、请问单核机器上写多线程程序,是否需要考虑加锁,为什么?
20、请问线程需要保存哪些上下文,SP、PC、EAX这些寄存器是干嘛用的
21、请你说一说线程间的同步方式,最好说出具体的系统调用
22、游戏服务器应该为每个用户开辟一个线程还是一个进程,为什么?
23、请你说一说OS缺页置换算法
24、请你说一说操作系统中的结构体对齐,字节对齐
25、请你说一下虚拟内存置换的方式
26、A a = new A; a->i = 10;在内核中的内存分配上发生了什么?
27、给你一个类,里面有static,virtual,之类的,来说一说这个类的内存分布
28、请问如何设计server,使得能够接收多个客户端的请求
29、死循环+来连接时新建线程的方法效率有点低,怎么改进?
30、请问怎么唤醒被阻塞的socket线程?
31、请问怎样确定当前线程是繁忙还是阻塞?
32、空闲的进程和阻塞的进程状态会不会在唤醒的时候误判?
33、请问就绪状态的进程在等待什么?
34、两个进程访问临界区资源,会不会出现都获得自旋锁的情况?
35、假设临界区资源释放,如何保证只让一个线程获得临界区资源而不是都获得?
36、系统调用是什么,你用过哪些系统调用,和库函数有什么区别?
37、请你来说一说用户态到内核态的转化原理
38、请你说一下源码到可执行文件的过程
39、请你来说一下微内核与宏内核
40、请你说一下僵尸进程
41、请你说一说异步编程的事件循环
42、请你回答一下操作系统为什么要分内核态和用户态
43、请你回答一下为什么要有page cache,操作系统怎么设计的page cache
44、server端监听端口,但还没有客户端连接进来,此时进程处于什么状态?
45、请问如何设计server,使得能够接收多个客户端的请求
46、死循环+来连接时新建线程的方法效率有点低,怎么改进?
47、两个进程访问临界区资源,会不会出现都获得自旋锁的情况?
48、假设临界区资源释放,如何保证只让一个线程获得临界区资源而不是都获得?
49、请问怎么实现线程池
网友评论