21、协程了解吗(高频)
协程和微线程是一个东西。
协程就是子程序在执行时中断并转去执行别的子程序,在适当的时候又返回来执行。
这种子程序间的跳转不是函数调用,也不是多线程执行,所以省去了线程切换的开销,效率很高,并且不需要多线程间的锁机制,不会发生变量写冲突。
22、那协程的底层是怎么实现的,怎么使用协程?
协程进行中断跳转时将函数的上下文存放在其他位置中,而不是存放在函数堆栈里,当处理完其他事情跳转回来的时候,取回上下文继续执行原来的函数。
23、进程的状态以及转换图
三态模型
1.执行:进程分到CPU时间片,可以执行
2.就绪:进程已经就绪,只要分配到CPU时间片,随时可以执行
3.阻塞:有l0事件或者等待其他资源
五态模型
1.新建态:进程刚刚创建。
2.就绪态:
3.运行态:
4.等待态:出现等待事件
5.终止态:进程结束
七态模型
1.新建态
2.就绪挂起态
3.就绪态
4.运行态
5.等待态
6.挂起等待态
7.终止态
24、在执行malloc 申请内存的时候,操作系统是怎么做的?/内存分配的原理说一下/malloc函数底层是怎么实现的?/进程是怎么分配内存的?
从操作系统层面上看,malloc是通过两个系统调用来实现的: brk和mmap
brk是将进程数据段(.data)的最高地址指针向高处移动,这一步可以扩大进程在运行时的堆大小
mmap是在进程的虚拟地址空间中寻找一块空闲的虚拟内存,这一步可以获得一块可以操作的堆内存。
通常,分配的内存小于128k时,使用brk调用来获得虚拟内存,大于128k时就使用mmap来获得虚拟内存。
进程先通过这两个系统调用获取或者扩大进程的虚拟内存,获得相应的虚拟地址,在访问这些虚拟地址的时候,通过缺页中断,让内核分配相应的物理内存,这样内存分配才算完成。
25、什么是字节序?怎么判断是大端还是小端?有什么用?
字节序是对象在内存中存储的方式,
大端即为最高有效位在前面,小端即为最低有效位在前面。
判断大小端的方法:使用一个union数据结构
26、Linux的lO模型介绍以及同步异步阻塞非阻塞的区别(超级重要)
I0过程包括两个阶段:
o内核从l0设备读写数据和
o进程从内核复制数据
●阻塞:调用l0操作的时候,如果缓冲区空或者满了,调用的进程或者线程就会处于阻塞状态直到l0可用并完成数据拷贝。
●非阻塞:调用I0操作的时候,内核会马上返回结果,如果I0不可用,会返回错误,这种方式下进程需要不断轮询直到l0可用为止,但是当进程从内核拷贝数据时是阻塞的。
●l0多路复用:就是同时监听多个描述符,一旦某个描述符I0就绪(读就绪或者写就绪),就能够通知进程进行相应的I0操作,否则就将进程阻塞在select或者epoll语句上。
●同步l0:同步l0模型包括阻塞I0,非阻塞l0和l0多路复用。特点就是当进程从内核复制数据的时候都是阻塞的。
●异步l0:在检测l0是否可用和进程拷贝数据的两个阶段都是不阻塞的,进程可以做其他事情,当l0完成后内核会给进程发送一个信号。
27、EPOLL的介绍和了解
Epoll是Linux进行l0多路复用的一种方式,用于在一个线程里监听多个IO源,在l0源可用的时候返回并进行操作。它的特点是基于事件驱动,性能很高。
epoll将文件描述符拷贝到内核空间后使用红黑树进行维护,同时向内核注册每个文件描述符的回调函数,当某个文件描述符可读可写的时候,将这个文件描述符加入到就绪链表里,并唤起进程,返回就绪链表到用户空间,由用户程序进行处理。
Epoll有三个系统调用:epoll_create() , epoll_ctl()和epoll_wait()。
epoll_create()函数在内核中初始化一个eventpoll对象,同时初始化红黑树和就绪链表。
epoll_ctl()用来对监听的文件描述符进行管理。将文件描述符插入红黑树,或者从红黑树中删除,这个过程的时间复杂度是log(N)。同时向内核注册文件描述符的回调函数。
epoll_wait()会将进程放到eventpoll的等待队列中,将进程阻塞,当某个文件描述符I0可用时,内核通过回调函数将该文件描述符放到就绪链表里,epoll_wait()会将就绪链表里的文件描述符返回到用户空间。
28、IO复用的三种方法(select,poll,epoll)深入理解,包括三者区别,内部原理实现?
(1) select的方法介绍:select把所有监听的文件描述符拷贝到内核中,挂起进程。当某个文件描述符可读或可写的时候,中断程序唤起进程,select 将监听的文件描述符再次拷贝到用户空间,然select后遍历这些文件描述符找到l0可用的文件。下次监控的时候需要再次拷贝这些文件描述符到内核空间。select支持监听的描述符最大数量是1024。
select示意图
(2) poll使用链表保存文件描述符,其他的跟select没有什么不同。
(3) epoll将文件描述符拷贝到内核空间后使用红黑树进行维护,同时向内核注册每个文件描述符的回调函数,当某个文件描述符可读可写的时候,将这个文件描述符加入到就绪链表里,并唤起进程,返回就绪链表到用户空间。
epoll示意图
29、查询进程占用CPU的命令(注意要了解到used, buf,代表意义)
top命令查看linux负载;
uptime查看linux负载;
w查看linux负载;
vmstat查看linux负载。
30、硬连接和软连接的区别
- 硬链接是目标文件的另一个名称,而软链接是一个指向目标文件或目录的文件。
- 软链接可以跨文件系统和目录,而硬链接只能在同一个文件系统中使用。
- 删除目标文件后,软链接仍然可以访问,而硬链接将无法访问。
- 硬链接与原文件共享inode,即它们有相同的inode号和相同的device号。
因此,对于硬链接和原文件来说,它们的访问权限、所有者、大小等属性都是相同的。软链接是指在不同的文件系统之间,将一个文件名关联到另一个文件上,使得该文件名也可以访问该文件。
标签:文件,复习,epoll,编程,描述符,内核,l0,Linux,进程 From: https://blog.csdn.net/m0_68250740/article/details/139452642