八股文0814

select的原理和缺点
1.创建存储文件描述符的列表,列表的类型是fd_set,整数类型,大小为1024比特位,每个比特位表示文件描述符的状态,0表示不检测文件描述符对应的事件,1表示检测文件描述符对应的事件。
2.检测 调用select()函数,检测对应的事件,该函数是阻塞的,直到文件描述符中的一个或者多个进行IO操作,函数返回,并修改文件描述符的值
3.select返回时告诉进行有多少个文件描述符进行IO操作,进程遍历列表修改文件描述符的状态
缺点:
1、内存有限,只能存储1024个文件描述符
2、在检测时,需要用户态和内核态进行切换,开销较大
3、文件描述符越多,效率越慢
4、只返回事件个数,具体是哪个事件进行操作,还需要轮询一遍

简述epoll原理
1、创建epoll实例:调用epoll_create函数创建实例,实例包含两个数据结构,一个是用于存储需要监控的文件描述符(红黑树),一个是双向链表(存储就绪的文件描述符
2、注册实例:调用epoll_ctl函数,将感兴趣的事件和文件描述符注册到epoll实例中,可以增加修改删除事件和文件描述符
3、就绪:调用epoll_wait函数,内核将检测并返回就绪的事件,应用程序将进一步处理这些事件
两种工作模式
1、水平出发。LT。如果文件描述符准备就绪,内核会不断提醒应用程序直到应用程序处理好这些事件
2、边缘出发,ET,文件描述符每改变一次,内核就提醒应用程序一次,但只有一次
epoll的优点
避免大量的轮询,提高IO复用的效率

写时拷贝
在读操作的时候,父子进行共享内存空间,在进行写操作的时候,才复制地址空间,让各自拥有各自的地址空间

分段和分页
分段:
1、将程序按照逻辑功能分段
2、每个段进行独立存储和保护,离散存储
3、段的大小根据需求动态调整
分页:
1、将程序分为固定且相同大小的页
2、离散存储,并且可以不连续
3、通过页表可以实现从虚拟内存到物理内存的转换
段和页
1、结合两者的优点
2、先将程序分段,再将每段进行分页
3、根据段表和页表完成逻辑地址到物理地址的映射
段的基质+页表的物理页号+页内偏移

互斥锁和自旋锁
互斥锁:每个共享内存关联一个互斥锁,进程在访问内存资源时,要先获得互斥锁,如果互斥锁杯其他进程占用,这个进程就不能访问共享资源;当访问完内存资源后,进程要释放互斥锁。互斥锁保证互斥
自旋锁:当进程访问一个正被其他进程访问的内存资源时,进入自旋状态,而是等待且不断询问,这个适用于占有锁时间较短的进程
他俩的区别
如果进程获取不到互斥锁,会切换进程,释放CPU资源。如果获取不到自旋锁,还是会占有cpu,进行忙等待

说一下共享内存
进程间的一种通信方式。共享内存有一个进程创建,映射后,能被其他进程访问和修改,是所有进程通信最快的方式
缺点是共享内存不提供进程同步的方式,我们需要通过其他方式进行同步

虚拟内存和物理内存
物理内存是直接访问物理地址,隔离性差,并且物理内存不够
虚拟内存就是当创建一个进程时,系统会分配给这个进程一个连续的地址空间,就是虚拟内存,他不是真实存在的,而是物理内存空间的映射,它允许进程访问比物理内存还大的内存空间,并且能实现进程之间内存相互隔离,当程序运行时发生内存不够的情况,可以通过页面置换额方式把部分数据写入硬盘的虚拟内存中,等需要的时候再重新载入

什么是页面置换
页面置换是当运行程序时,内存空间不足,通过某些页面置换的算法将页面载入到磁盘的虚拟内存中,并且从物理内存删除
常见的页面置换的算法:
1、最近最久未使用:最长时间未使用
2、先进先出
3、最不经常使用:访问次数最少

进程同步的方式和线程同步的方式
线程:条件变量,互斥锁,读写锁,信号量
进程:互斥锁,信号量,消息队列,共享内存,管道

条件变量
线程同步的方式,当满足某一条件变量时,可唤醒等待的线程;
线程先获取互斥锁,访问共享资源,然后检查共享资源内某些条件是否满足,如果不满足,则释放互斥锁,挂起等待;当其他线程完成对共享资源得访问后导致条件发生了改变,唤醒等待得线程,线程再次获取互斥锁,检测条件是否满足,如果不满租,则。。。如果满足,则齿形程序。线程执行完毕后,释放锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值