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

2023-10-22 23:16
文章标签 面试 2023 准备 广州 1019 kw

本文主要是介绍面试准备(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会根据新的物理内存映射重新加载数据。

这篇关于面试准备(2023 1019 ,广州安kw)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/264200

相关文章

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的

毕业前第二次面试的感慨

距面试已经过去了有几天了,我现在想起来都有说多的恨感慨。 我一直都是想找刚刚起步的企业,因为这能让我学到更多的东西,然而正好有一家企业是刚起步的,而且他还有自己的产品专利,可以说这是一家,即是创业又是刚起步的公司,这家公司回复了我投给他的简历,这家企业想进一步了解我的情况,因为简历上我符合这家企业的基本要求,所以要进一步了解。 虽然面试的过程中,他给我的面试题,我做得并不是很理想,

第十章 【后端】环境准备(10.4)——Vagrant

10.4 Vagrant Vagrant 官网 Vagrant 镜像仓库 下载 安装 直接 install。 设置环境变量 Vagrant 默认将镜像保存在用户文件夹的 .vagrant.d 目录下,若用户文件夹在C盘,下载的镜像文件会大量占用C盘空间。设置环境变量 VAGRANT_HOME 后,Vagrant 会将镜像保存到环境变量指定的文件夹下。

OpenStack离线Train版安装系列—2计算节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版