私密VIP群答疑
订阅了第一季旗舰篇的小伙伴都可以加入到笨叔叔的私密VIP群中讨论,笨叔为大家解答职场困惑,职场发展方向,技术问题等!下面几个常见有意思的问题。
Centos/RHEL 7的内核和社区的内核有什么区别?
国内使用Centos的厂商数不胜数,比如国内的绝大部分的互联网公司都采用Centos作为服务器的Linux发行版,包括BATJ等大公司。那有小伙伴问centos 7里采用的Linux内核和社区里的Linux内核有什么区别?
这是一个好问题,研究服务器的小伙伴一般都研究RHEL维护的内核。而centos是RHEL的开源发行版,所以很多不想买红帽服务的公司都采用centos,centos和RHEL的差别只有一点点,可以认为完全一样,所以很多公司把centos当中RHEL的免费替代品。目前RHEL 7.4版本使用的内核是 3.10,一定有小伙伴说,这个版本太低了,现在社区最新的都是4.15了,为何RHEL用这么低的版本呢?
其实RHEL作为一个产品,特别是服务器版本上的OS,必须保证稳定性和质量,所以不可能采用最新社区的Linux内核版本。RHEL每个版本的发布都经历过长时间的测试和性能优化。另外RHEL的内核版本会更新需求把社区的最新feature移植回这个版本,所以不能完全看内核版本号。红帽公司是这个星球上Linux内核技术最强的公司,所以大家都信任和采用RHEL/centos。
从linux内核社区里直接拿的内核版本,如果要做产品的话,还是需要做额外的测试和优化才能发产品,这也是为什么这么多大大小小的公司都需要建自己的内核团队。
centos 7.4内核源代码下载地址:
http://vault.centos.org/7.4.1708/os/Source/SPackages/kernel-3.10.0-693.el7.src.rpm
大家可以看笨叔的两期关于如何图形化单步调试centos 7内核的视频:
预告片:
https://v.qq.com/txp/iframe/player.html?vid=z05617hy9d3&width=500&height=375&auto=0
Centos/RHEL 7的内核和社区的内核有什么区别?
mmap/munmap接口是用户空间最常用的一个系统调用接口,无论是在用户程序中分配内存、读写大文件、链接动态库文件,还是多进程间共享内存,都可以看到mmap/munmap的身影。mmap/munmap函数声明如下:
#include<sys/mman.h>
void *mmap(void*addr, size_t length, int prot, int flags,
intfd, off_t offset);
int munmap(void*addr, size_t length);
1. addr:用于指定映射到进程地址空间的起始地址,为了应用程序的可移植性,一般设置为NULL,让内核来选择一个合适的地址。
2. length:表示映射到进程地址空间的大小。
3. prot:用于设置内存映射区域的读写属性等。
4. flags:用于设置内存映射的属性,例如共享映射、私有映射等。
5. fd:表示这个是一个文件映射,fd是打开文件的句柄。
6. offset:在文件映射时,表示文件的偏移量。
参数fd可以看出mmap映射是否和文件相关联,因此在Linux内核中映射可以分成匿名映射和文件映射。
a. 匿名映射:没有映射对应的相关文件,这种映射的内存区域的内容会被初始化为0。
b. 文件映射:映射和实际文件相关联,通常是把文件的内容映射到进程地址空间,这样应用程序就可以像操作进程地址空间一样读写文件。
最后根据文件关联性和映射区域是否共享等属性,又可以分成如下4种情况。
表 mmap映射类型
映射类型 | ||
私有映射 | 共享映射 | |
匿名映射 | 私有匿名映射–通常用于内存分配 | 共享匿名映射–通常用于进程间共享内存 |
文件映射 | 私有文件映射–通常用于加载动态库 | 共享文件映射–通常用于内存映射IO,进程间通讯 |
当然这里面还有一个例外,就是fd打开的是设备文件,那么mmap的内容通常不是page cache了,而是DMA buffer或者一段设备驱动使用的物理内存,比如framebuffer驱动。
read()/write()是如何读取到磁盘内容的?
哈,这个问题相当复杂,但是也是很有意思的一个问题,用户空间的read()/write()函数读写一个普通文件(假设文件系统是ext4,存储介质是emmc),那在Linux内核里是怎么一步一步的实现把磁盘的文件内容读取出来的呢?
这里面涉及的模块很多,比如系统调用,VFS虚拟文件系统,page cache,ext4文件系统,block layer,block调度,mmc驱动,emmc驱动等。
笨叔在几年前画了一个图,希望对大家有帮助。
欢迎订阅第一季旗舰篇
笨叔的微信公众号
迈向百w年薪,只差您一个拍打!
淘宝店地址:shop115683645.taobao.com