首页 > 系统相关 >【Linux系统编程复习】一些常见的问题3

【Linux系统编程复习】一些常见的问题3

时间:2024-06-04 20:00:39浏览次数:33  
标签:文件 复习 epoll 编程 描述符 内核 l0 Linux 进程

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

相关文章

  • Linux基础命令
    常用的Linux命令pwd命令作用:查看当前在哪个目录:pwd输出:ls命令作用:列出当前目录下的内容:ls#列出文件夹下的内容ls-a#列出文件夹下的内容,包括隐藏的文件ls-l#列出文件夹下的内容,以列表的形式ls-al#以列表形式,列出当前文件夹下的所有内......
  • Linux 安装了MySQL 8.0后 如何修改初始密码
    1.grep‘temporarypassword’ /var/log/mysqld.log #查看初始临时密码2.systemctlstartmysqld #启动mysql3.mysqladmin-uroot-ppassword‘xxx’ #这里的xxx一般是大写字母加小写字母,数字和字符组成一共12-13个左右就可以修改4.这里的Enterpassword......
  • 网络编程练习题---利用UDP协议实现组播通信
    目录题目解析代码实现题目解析由于该题需要实现组播通信,所以我们需要将套接字文件句柄设置为组播属性,并将需要通信的用户端IP地址,加入组中。由于组播通信需要实现一对多发送消息,所以还需要将套接字文件句柄的广播属性一并开启。由于该题实现过程使用到了线程相关函数接口,所......
  • linux网络配置1.1
    ifconfig当前设备正在工作的网卡。启动的设备。-a所有网络设备。ifconfigens33查看查看指定网卡设备ifconfigens33up/down对指定网卡设备进行开关基于物理网卡设置虚拟地址,重启之后就会消失。ifconfigens33:0192.168.233.100创建虚拟网卡如果有多个网卡,需要......
  • Linux学习笔记6 进程角度看内存泄露
    一,从进程角度看堆区内存申请与释放问题1,c语言中的内存泄漏内存溢出:申请内存时,没用足够的内存可以使用。 内存泄露:严格来说,只有对象不会再被程序用到了,但是GC又不能回收它们的情况,才叫内存泄漏                宽泛的讲,实际情况中很多时候一些不太好的实践......
  • Archlinux安装教程
    先放张图:  准备工作1、进入Live环境后关闭reflectorsystemctlstopreflector2、使用iwctl联网3、timedatectl修改时区timedatectlset-timezoneAsia/Shanghai4、date验证时间fdisk-l查看硬盘和分区情况cfdisk<硬盘编号>修改分区如:cfdisk/dev/sda5、......
  • 在Linux系统minIO的下载和使用
    1.安装docker1.1卸载旧版docker首先如果系统中已经存在旧的Docker,则先卸载:yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine1.2配......
  • Linux服务器磁盘清理与Inode节点清理指南
    Linux服务器磁盘清理与Inode节点清理指南在管理Linux服务器时,定期清理磁盘空间和inode节点是维护系统性能和稳定性的重要任务。磁盘空间清理可确保系统不会因为空间不足而出现问题,而inode节点清理则有助于避免系统因过多小文件而性能下降。本指南将介绍如何执行这些清理操......
  • linux进程和计划任务管理
    一、查看和控制进程程序是保存在外部存储介质(如硬盘)中的可执行机器代码和数据的静态集合,而进程是在 CPU 及内存中处于动态执行状态的计算机程序。在 Linux 操作系统中,每个程序启动后可以创建一个或多个进程。例如,提供 Web 服务的 httpd 程序,当有大量用户同时访问Web......
  • linux系统下分区逻辑卷扩容
    问题描述使用vmware新建服务器,明明给系统盘分配了一个200GB的磁盘空间,服务器创建成功后,但是服务器中启动一个大小约为11GB的docker服务却提示磁盘空间不足nospaceleftondevice。解决过程检查磁盘挂载详情`[root@SkyEye~]#lsblkNAMEMAJ:MIN......