linux架构图(6个人公司的架构图)
linux内存管理子系统架构图
内存管理体系
内存管理是Linux内核中复杂且关键的部分,它涉及三个主要层次:用户空间、内核空间和硬件空间。
用户空间层,主要由Linux内核为用户提供的一系列系统调用接口组成,如brk、mmap等,这些接口被封装在libc库中,从而在C语言中以标准函数的形式呈现,例如mmap()和malloc。
内核空间层包含多种模块,主要负责处理用户空间请求并管理内存资源,如系统调用处理、VMA管理、缺页中断管理、匿名页面、page cache、页面回收、反映映射、slab分配器、页表管理等。
硬件层由处理器的MMU、TLB和cache部件,以及物理内存DDR组成,是内存管理的基础。
以下为Linux内存管理框图、内存管理体系简图和内存管理全局图,图中以task_struct的mm作为起点进行展示。
参考资料:
Linux内核分析(三)----初识linux内存管理子系统- wrjvszq-博客园
Linux内核MMU机制实现讲解_mmu工作机制图示-CSDN博客
Linux内存管理机制解析- DBKernel-博客园
五万字|深入理解Linux内存管理-腾讯云开发者社区-腾讯云
极致Linux内核:纯干货,linux内存管理——内存管理架构(建议收藏)
ubuntu和linux的区别
1、系统不同。
unix的厂商基本上都是软硬件共同开发,所以unix系统通用性不高,主要都是针对专门的硬件进行专门的设计。
所以性能、稳定性都极致的好;而linux确是一个通用系统,大部分的厂商并不自己生产硬件(只有少数像redhat。
2、适合人群不同。
从商业上来讲,由于上面的性能差别,就导致了两种不同的商业模式,unix软硬件一起卖,而且很贵(freebsd除外),而linux只卖软件,大多免费(像radhat这样走unix道路的厂商,还是少数);所以,unix适合大型企业,而linux适合中小型企业和个人。
3、概念不同。
由于linux是开放源代码的自由软件,所以不同的人,不同的社区或者公司都可以按照自己想法,用linux内核来“组装”出一个操作系统。Ubuntu就是一个linux发行版,也就是说ubuntu是以linux为内核的操作系统。
所以其实ubuntu和linux根本不是同一个概念,如果Linux是指人类,那么Ubuntu只是一个名为乌班图的人。
请问运行于不同CPU构架的linux,它们的软件可以通用吗
以上回答中jiangtao9999的比较靠谱儿。
是这样:
1、Linux下的软件几乎都是c语言的;
2、如果你学过C语言,找找书应该有这样一个概念:ANSI C,这个是一个C语言的标准,比如printf这个函数就属于标准库(也就是符合ANSI标准的)函数
3、假如你编写了一个软件,代码中仅仅包含ANSI的库函数,那么没有问题,只要是支持C语言的平台,都能正常运行,即:编写了一个简简单单的helloworld到哪里编译运行都没有问题。
【前提是:】编译再运行,不编译就运行是不可以的,比如printf函数在各种架构上的实现方式是不可能相同的,所以需要在arm的编译器上再编译一遍才可以。否则运行不了。
有的软件平台可以不用编译,直接运行,比如jiangtao9999说的java、Python什么的,Java可以实现“一次编译,满哪运行”什么的,而Python则是有了.py源代码就可以无敌了,使用的时候不用你去执行编译命令,直接执行即可。arm上实现这两种语言都是很容易的——下载源代码、编译、安装即可。
4、不同架构的Linux平台都要实现一个编译器,这是很重要的,有了编译器,才可以从源代码安装软件。
5、使用非ANSI库中的函数需要该Linux包含这个函数的实现,否则,编译后的连接将不通过,比如一个软件使用了GTK来实现图形用户界面,那么就需要系统中包含了gtk的库函数,这就叫依赖,安装软件,首先要解决依赖,依赖有时候解决起来很麻烦,所以软件开发过程中尽量减少依赖,这样方便安装。
6、tar.gz这种格式的软件包有可能是源代码,有可能是可执行文件(这是因为那只是一个压缩包,内容是什么不一定),这两者不同。很多软件以tar.gz格式发布源代码,而qq的Linux版本属于可执行文件,在几乎所有Linux平台下面直接双击或者通过命令就可以使用。
7、如果你使用的是rpm包或者deb包或者是tar.gz文件包中可执行文件形式的软件包,而不是tar.gz这种形式的源代码,你需要使用相应的软件包管理器安装就行,
但这不意味着arm版本的deb和x86版本的deb文件是通用的,你能这样用是因为所有的使用x86机器的软件经过编译或者交叉编译(在arm平台上编译x86平台上的软件就叫交叉编译)以后,运行于几乎完全一样的统一的平台上,实现软件和系统的无缝对接,方便了用户——一方面可以不用浪费编译的时间,主要还是方便了那些不会编译软件的人。
8、我也正在学习Linux,所以很多地方不太对,这只是我现在的一些理解。jiangtao9999说的主要是和汇编有关,如果代码的实现主要是在c语言水平,那么就会由编译器屏蔽掉指令集和寄存器什么的。
9、要是在百度回答的答案能改改就好了,这样错误就会少一点。
10、重新罗嗦一遍:
1在不重新编译源代码的情况下,x86下linux的软件不可以运行于arm构架的Linux,即使运行也会奇卡。
2和在编译是否时为X86的CPU构架优化了编译无关。(把我问迷糊了,估计是无关)
3软件在编译时是否为X86的CPU构架而优化主要看作者了,资料可以参看
4和不同的安装包格式有一定关系
5tar.gz格式的软件包不能保证在不同架构的Linux都能运行
6在arm的linux安装时解决依赖以后,乳沟编译通过基本是没什么问题的
7不是所有源代码在arm和x86下编译一下就可以了,还需要做一些努力
8有源代码可以对遇到的不通过的问题逐一解决,理论上可以实现所有软件都能运行
9重新编译过程中如果遇到依赖问题需要逐一解决