面试准备(2023 1019 ,广州安kw)

软链接与硬链接的区别。

相同点

链接解决的痛点都是要解决数据访问时候的路径重定向的问题。

不同点

软连接顾名思义,他只是一个链接,目标就是指向源文件,能够访问源文件。软连接可以跨文件系统。而硬链接不行。

硬链接的链接直接链接的是inode链接的更加底层,只要存在硬链接,即使原来文件删除了也能访问,即保存内部的文件,类似百度网盘一样,复制粘贴是假的,相同的编码的文件是只会存储一份。所有人的都删除了才算是删除,硬链接有保存原文件的功能,不怕误删除,也不怕原文件移动位置。

目录不能硬链接,但是可以软链接

2.对DMA操作的认识,DMA数据存取的协议而存在,免于使用不同的CPU还要进行配置,有专用的硬件底层的逻辑电路支持。

直接内存读取,是cpu访问内存的一种方式,允许不同速率的硬件装置进行沟通,并且不用依赖cpu,传输动作由DMA控制器完成

1.DMA请求

2.DMA响应

3.DMA传输

4.DMA结束

CPU读取外部数据,相对于DMA的劣势,DMA专用性很强,省去大boss的精力,让大boss省出时间去干更有意义的事情去。

地址计算: 地址计算通常占用的时间非常短,因为它主要涉及简单的算术运算。通常,这个步骤所占用的时间可以忽略不计。

内存地址传递: 传递地址到内存控制器通常也非常快,因为这是通过地址总线完成的。这个步骤通常也可以忽略不计。

内存读取请求: 内存读取请求的时间取决于内存控制器的性能和负载,以及请求的地址是否在内存中缓存。在通常情况下,内存读取请求的时间通常比较短。

内存控制器操作: 内存控制器的操作时间取决于具体硬件设计和访问模式。如果内存控制器的性能较好且数据易于访问,这一步骤的时间可能相对短。

数据传输到寄存器: 数据传输到CPU内部寄存器或缓存通常非常快,因为这些存储器位于CPU内部,可以高效地访问数据。

处理数据: 数据处理时间会根据CPU的性能和所执行的操作而有所不同。这个时间比例取决于对图像的具体处理需求。

等待时间: 在整个过程中,可能会有一些等待时间,这可能是由于内存访问延迟、数据传输速度慢或其他系统负载因素引起的。等待时间可能会显著影响整体时间比例。

3.字符设备所需要的接口

1.open/close   //打开关闭

2.read/write  //读写

3.ioctl   //配置寄存器操作

4.mmap //地址映射,乾坤大挪移

mmap: mmap 系统调用允许应用程序将字符设备文件映射到其地址空间中,从而使应用程序能够直接访问设备内存或缓冲区,而无需通过传统的 readwrite 操作。这种内存映射技术对于需要高性能数据传输的应用程序非常有用。

一半情况字符设备是指使用某些接口的设备,比如键盘、鼠标、蓝牙、tty等等,要求实时传输少量信息的。

MMU(内存管理单元)的工作原理是将虚拟地址映射到物理地址,以便访问主存储器中的数据。下面是MMU的工作原理的简要概述:

  1. 虚拟地址和物理地址分离: 操作系统和应用程序使用虚拟地址来寻址内存,而物理地址则用于实际的内存访问。MMU的任务是将虚拟地址映射到物理地址。

  2. 页表: 为了实现地址映射,操作系统维护了一个数据结构,通常称为页表。页表将虚拟页号映射到相应的物理页框号。页表的基地址通常存储在特殊的CPU寄存器(在ARM体系结构中是CP15的C2寄存器)中。

  3. 分页: 操作系统将虚拟地址空间分为固定大小的页面(通常是4KB)。当应用程序引用虚拟地址时,MMU会将虚拟地址分为页号和页内偏移。

  4. TLB(快表): 为了提高地址映射的性能,MMU使用TLB,它是一个高速缓存,用于存储最近使用的页表项。TLB存储了一些最常用的页表项,以便在下一次引用相同页时可以快速找到对应的物理页框。

  5. 地址转换: 当应用程序引用虚拟地址时,MMU首先查找TLB,如果在TLB中找到了对应的页表项,MMU会将虚拟页号转换为物理页框号,并将页内偏移添加到物理页框号上,得到物理地址。如果在TLB中找不到对应的页表项,MMU将访问页表,找到相应的页表项并将其加载到TLB中,然后进行地址转换。

  6. 缺页中断: 如果在虚拟地址中找不到对应的页表项,MMU会引发缺页中断。操作系统会处理此中断,将所需的数据从外部存储器(如硬盘)加载到内存,并更新页表,然后重新启动引发中断的指令。

  7. 更新TLB: MMU会定期更新TLB,以确保它包含最新的页表项。在TLB中的页表项通常是根据最近的使用情况进行替换的。

总之,MMU的工作原理涉及将虚拟地址映射到物理地址,使用页表和TLB来实现这一映射过程。这有助于操作系统和应用程序以虚拟地址的方式管理内存,同时允许硬件访问实际的物理内存

Linux内核分为四个子系统

进程管理

进程管理是Linux操作系统的核心功能之一,它涉及创建、调度、终止和管理进程。Linux内核负责为每个进程分配资源,如CPU时间、内存和文件描述,以便他们能够并发运行。进程间管理还包括进程状态转换、进程调度和进程优先级等概念。

进程间通信

进程间通信是Linux系统中不同进程之间交换数据和信息的方法和机制。常见的IPC机制包括管道、消息队列、信号、共享内存和套接字等。这些机制允许进程在同一系统上或不同系统上进行通信和协作。

内存管理

内存管理涉及分配、回收和保护系统内存。Linux内核负责将物理内存分配给进程,管理虚拟内存,进行页面交换,以及维护内存权限和保护机制。内存管理还包括虚拟内存、页表和内存分页等概念。

文件系统

文件系统是Linux中用于管理文件和目录的核心子系统。Linux支持多种文件系统类型,如ext4、NTFS、FAT32等。虚拟文件系统(VFS,Virtual File System)是Linux文件系统的抽象层,它使不同类型的文件系统可以与应用程序和内核交互,而无需修改应用程序代码。

网络接口

Linux操作系统提供了网络接口,以便计算机能够通过网络连接到其他计算机和服务。这包括网络协议栈、套接字编程接口、网络驱动程序和配置网络接口的工具。Linux支持各种网络协议,如TCP/IP、UDP、HTTP等,以实现网络通信。

虚拟文件系统通常不是Linux操作系统的主要子系统之一,但它是文件系统的抽象层,用于统一处理不同类型的文件系统。它允许应用程序使用相同的系统调用来访问不同的文件系统,而无需关心底层文件系统的差异。

2.在windows环境下共享Linux中的用户目录的一个工具是?

Samba服务器

Linux内核的多线程同步机制有哪些?

Linux内核提供了多种多线程同步机制,这些机制用于确保多个线程能够在共享资源上安全地协同工作。以下是一些常见的Linux内核多线程同步机制:

  1. 互斥锁(Mutex): 互斥锁用于保护临界区,确保只有一个线程可以访问临界区的代码。它是最常见的同步机制之一。

  2. 读写锁(Reader-Writer Lock): 读写锁允许多个线程同时读取共享数据,但只允许一个线程写入共享数据。这对于读取频繁、写入较少的场景非常有用,以提高性能。

  3. 条件变量(Condition Variable): 条件变量允许线程等待某个条件的发生,然后在条件满足时唤醒线程。通常与互斥锁一起使用,以在共享资源上进行条件等待。

  4. 信号量(Semaphore): 信号量是一个计数器,用于控制多个线程对共享资源的访问。它可以用于限制同时访问资源的线程数。

  5. 自旋锁(Spin Lock): 自旋锁是一种轮询锁,它会一直尝试获取锁,而不会将线程置于休眠状态。自旋锁在内核中使用频率较低,通常用于一些特定的场景。

  6. 屏障(Barrier): 屏障用于等待一组线程达到某个点,然后同时继续执行。它对于分阶段任务的协同工作非常有用。

  7. 原子操作: 原子操作是一种特殊的操作,它在不被中断的情况下执行,以确保线程之间的原子性。原子操作通常涉及对共享数据的增减、赋值等操作。

这些同步机制在Linux内核中被广泛使用,以确保多线程程序的正确性和性能。开发者可以根据具体的应用场景和需求选择合适的同步机制。不同的同步机制在性能、复杂性和适用场景上都有不同的权衡,因此需要谨慎选择。

原子操作

原子操作通常是在硬件或操作系统级别实现的,以确保操作的不可分割性。这意味着即使在多线程或多进程环境中,原子操作在执行时不会被中断,其他线程无法同时修改相同的数据。原子操作通常包括对内存位置的读取、写入、增加、减少等基本操作。

5.Linux指令实现当前目录下查找文件以lib开头的文件。

find ./ lib*

7.写出Linux指令实现在当前目录中递归查找包含字符串“string”的文件,但不搜索“.svn”目录

grep --exclude-dir .svn -r “string” ./*

编写strcpy函数

char * strcpy( char * dst , char * src ){assert( dst != NULL && src != NULL );char * tmp = dst;while( (*dst++ = *src++) != '\0');return tmp;
}

1. 阅读以下linux内核从系统调用返回到用户态的arm汇编代码。简要描述这种情况下,linux从内核态返回到用户态所做的工作。

实现list_entry宏代码

#define  list_entry(ptr,type,member)  ( (type*) ( ptr - &( ((type *)0)->member ) ) )

3. 简述Linux MMU的工作原理,或者简述Linux内核虚拟地址转换成物理地址的过程(可以按照32位体系结构来描述)

MMU解决痛点(主内存页表访问执行地址转换)

MMU的设计支持虚拟内存系统,它允许虚拟地址空间比物理内存更大,并管理虚拟地址到物理地址的映射,以实现内存的高效使用和虚拟内存的功能。

解决痛点同时有一种更优化的方法

直接每次都访问主内存中的页表以进行地址转换会花费时间。这是因为主内存的访问通常比 CPU 寄存器和高速缓存的访问速度慢得多。因此,频繁地访问主内存以执行地址转换会增加内存访问的延迟,从而影响程序的性能。

虚拟内存系统的目标之一是通过减少直接访问主内存的次数来提高性能。TLB(Translation Lookaside Buffer)就是设计用来缓存虚拟地址到物理地址的映射,以减少对主内存的访问。TLB 是一个小型、高速的硬件缓存,通常位于 CPU 中,可以存储最近访问的虚拟地址到物理地址的映射。当程序访问内存时,CPU 首先查找 TLB 来查找映射,如果映射存在于 TLB 中,CPU 可以直接执行地址转换,而不必访问主内存中的页表。

通过使用 TLB,可以大幅减少需要访问主内存的次数,从而提高内存访问的速度和程序的性能。TLB 的命中率(即在 TLB 中找到映射的概率)对性能有重要影响,因此优化 TLB 的设计和使用对于提高计算机系统性能非常关键。

TLB(Translation Lookaside Buffer)的主要目的是加速虚拟内存地址转换,从而提高内存寻址的速度。虚拟内存是一种计算机内存管理技术,它允许程序访问一个比物理内存更大的虚拟地址空间。

当程序访问内存中的数据时,它使用虚拟地址,而这些虚拟地址需要映射到物理内存中的实际地址。这个地址转换是由操作系统的内存管理单元执行的,通常需要访问页表来查找虚拟地址到物理地址的映射。

TLB 存储了部分虚拟地址到物理地址的映射,通常是最近访问的页表项。因此,TLB 允许 CPU 在执行指令时快速查找虚拟地址到物理地址的映射,而不必每次都访问主内存中的页表。这显著提高了内存寻址的速度,因为 TLB 具有非常低的访问延迟。

TLB 的目的是减少对主内存中页表的频繁访问,从而提高计算机程序的性能,特别是在虚拟内存系统中。通过加速地址转换,TLB 有助于减少了内存访问的延迟,这对于现代计算机系统的性能至关重要

MMU:主要作用是将虚拟地址转化为物理地址,当然还有在硬件上内存访问权限控制的功能。
页和页框:Linux的4g虚拟地址按照4k~16k分页处理,一般是4k,每一份称为页。页映射到同样大小的物理地址,称为页框。
页表项和页表:页与页框的映射关系,称为页表项(PTE),而页表项的集合,称为页表。
快表TLB:分页可能会生成很多页表项,并且页表是存在物理地址空间中的,当mmu收到一个虚拟地址时,如果直接在页表中查找,频繁对片外存储器读写很浪费时间资源(物理地址空间属于片外),所以出现了快表TLB,这是mmu专用的片上cache,将使用到的或者经常用的页表项存到TLB中,加快速度。

所以整个流程就是CPU运行到一个虚拟地址时,将该虚拟地址发送到MMU,MMU将其分为页和页内offset;首先在TLB中匹配页,如果找到对应页框,则补上偏移直接访问该物理地址,否则访问物理内存中的页表,找到对应的物理地址进行访问,同时保存到TLB中。
如果页表中发现该虚拟页没有对应的页框?这时候会发生一个缺页中断,交给OS处理,如果还有可以被映射的页框就直接分配,如果物理页框已经分配完了,那就会将某块较少使用的页框写回外部存储器,再重新把这个虚拟页映射到该页框中。
 

页面置换

页面置换(Page Replacement):当内存不足时,操作系统会选择一个或多个内存页面(页框)进行页面置换,将其写入磁盘上的Swap空间,并将新的数据加载到空闲的页框中。这个过程由内存管理部分执行,而MMU仍然负责虚拟地址到物理地址的映射,但这些映射可能会在内存页面置换过程中发生变化。

交换(Swapping):当内存不足时,操作系统可以将整个进程或进程的一部分从物理内存中移至磁盘上的Swap空间,以便为其他进程腾出足够的物理内存。这个操作由内存管理部分执行,MMU会根据新的物理内存映射重新加载数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15-bean生命周期,循环依赖

文章目录 1. bean生命周期 1. bean生命周期

数据挖掘原理与算法

一、什么是闭合项集? Close算法对Apriori算法的改进在什么地方? 闭合项集:就是指一个项集x,它的直接超集的支持度计数都不等于它本身的支持度计数。 改进的地方: 改进方向: 加速频繁项目集合的生成,减少数据库库的扫…

【SA8295P 源码分析 (三)】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析

【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析 一、QNX AIS Server 框架分析二、QNX Hypervisor / Android GVM 方案介绍三、Camera APP 调用流程分析四、QCarCam 状态转换过程介绍五、Camera 加串-解串 硬件链路分析六、摄像头初始化检测过程介绍…

290_C++_截取的一部分FTP视频上传代码,任务信息中读取视频帧数据并将其提供给 libcurl 用于上传。

1、这些结构体和枚举类型的设计是为了在上传过程中有效地存储和传递不同类型的任务信息,以便在上传操作中使用这些信息来管理和跟踪不同类型的上传任务。它们提供了不同类型上传任务所需的特定信息和状态变量 enum UploadTaskType {UTT_Common,UTT_Video };struct UploadInfo…

大模型、实时需求推动湖仓平台走向开放

大模型、实时需求高涨 AGI 时代,以 ChatGPT、Midjourney 等为代表的大模型迅速应用加速了 AI 普及,越来越多的企业选择搭建自己的 AI 基础设施,训练行业大模型。 另一方面,企业为了在瞬息万变的市场环境中更快的做出商业决策&…

php消息推送

使用PHP来实现消息推送功能 - 学新通 (swvq.com) Workerman是一款运行在PHP环境下的高性能的异步事件驱动框架,由著名PHP框架YII的作者王盼创建。该框架通过使用PHP socket扩展实现了对WebSocket的支持,并在此基础上实现了处理TCP/UDP协议的能力。 下面…

【C++】命名空间和using namespace std的注意事项

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

分享一下怎么开发一个陪诊小程序

开发一个陪诊小程序需要综合考虑许多方面,包括但不限于市场需求、用户体验、技术实现和运营策略。以下是一篇以开发陪诊小程序为主题的文章。 一、背景介绍 随着社会的发展和人口老龄化的加剧,越来越多的老年人、病患和孕妇需要就医,而由于各…

【分布式】入门级NCCL多机并行实践 - 02

# 背景知识 大模型和分布式训练对数据的吞吐量以及并行度都有很高的要求,NCCL就是在这个背景下诞生的。 如果你是一个只会写写Python,调用PyTorch和Horovod的算法萌新,可能对于分布式底层的东西不太了解,在下岗热潮中被主管逼着…

Java并发面试题:(七)ThreadLocal原理和内存泄漏

ThreadLocal是什么? ThreadLocal是线程本地存储机制,可以将数据缓存在线程内部。ThreadLocal存储的变量在线程内共享的,在线程间又是隔离的。 ThreadLocal实现原理? ThreadLocal的底层是ThreadLocalMap,每个Thread都…

Open3D(C++) 最小二乘拟合平面(拉格朗日乘子法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 设拟合出的平面方程为: a x + b y + c

FutureTask配合Thread实现处理有返回结果的源码、逻辑与架构分析

文章目录 1.介绍2.使用示例3.执行过程描述4.整体的关系5.涉及到的核心源码(只提取了关键代码)5.1 Callable5.2 RunnableFuture5.3 FutureTask5.4 Thread 1.介绍 FutureTask 能够接收 Callable 类型的参数,用来处理有返回结果的情况。 2.使用…

互联网摸鱼日报(2023-10-18)

互联网摸鱼日报(2023-10-18) 36氪新闻 最前线 | 耀宁品牌焕新:推出“S矩阵”战略,押注固态电池 8家消费公司拿到新钱,Manner咖啡门店破千,半数调研消费者预计收紧预算|创投大视野 发令枪响,百度已经冲出…

SpringCloud:自定义skywalking链路追踪

一、添加依赖&#xff1a; <dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.7.0</version></dependency><dependency><groupId>org.apache.sk…

深入浅出@Cacheable

Cacheable的使用详解&#xff0c;源码级别解析 在现代的应用程序中&#xff0c;缓存是提高性能和可扩展性的重要组成部分。Spring框架提供了Cacheable注解来轻松地将方法结果缓存起来&#xff0c;以便在后续调用中快速访问。本文将详细介绍Cacheable注解的使用方法&#xff0c…

Mac Intellij Idea get/set方法快捷键

Control Retrun(回车键) Command n 参考&#xff1a; Mac Intellij Idea get/set方法快捷键-CSDN博客

Android中使用Java操作List集合的方法合集,包括判读是否有重复元素等

1、判断是否有重复元素 List<String> mList new ArrayList<>();//将List转为Set&#xff0c;通过比较大小是否一样&#xff0c;判断是否有重复元素 Set<String> stringSet new HashSet<>(mList); boolean isHasRepeat false; if (mTipBeanList.siz…

Cornerstone for Mac:高效SVN管理的黄金标准

在当今的软件开发领域&#xff0c;版本控制系统是不可或缺的一部分。其中&#xff0c;Subversion&#xff08;SVN&#xff09;是一个广泛使用的版本控制系统&#xff0c;有助于团队协同工作&#xff0c;实现代码的版本管理和追踪。对于Mac用户来说&#xff0c;Cornerstone是一款…

代码随想录打卡第四十四天|● 01 二维背包问题 ●一维背包问题-滚动数组 ● 416. 分割等和子集

什么是01背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 01背包的模板 二维dp数组 dp数组的含义 dp[i][j]含义下标为【0-i】之间…

【Linux】进程概念与进程状态

文章目录 一、进程概念1.进程的概念2.进程的描述-PCB 二、进程相关的基本操作1.组织进程2.查看进程3.结束进程4.通过系统调用获取进程标示符5.通过系统调用创建进程-fork初识 三、进程状态1.普遍操作系统层面的进程状态2.Linux操作系统的进程状态 四、两种特殊的进程状态1.僵尸…