Linux内核有多大,不同Linux版本内核有啥差别呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核有多大,不同Linux版本内核有啥差别呢相关的知识,希望对你有一定的参考价值。

根据版本的不同,内核大小也不同,新版本为几百M。

1、发行版的不同,主要是对于版本的选择,稳定性的测试,还有错误修正补丁都会让每个发行版有自己特殊的内核。

2、官方内核的不同,这个区别很好说,官方的开发是基于 git 版本控制的,去看两个 git 版本就知道了。一般是硬件支持,还有新的功能算法,还有驱动增减,错误修补什么的。

Linux的内核版本编号有点像如下的样子:

2.6.32-642.el6.x86_64

主版本.次版本。发布版本-修改版本。

虽然编号就是如上的方式来编写,不过依据Linux内核的发展历程,内核版本的定义有点不太相同。

奇数、偶数版本分类:

在2.6x版本以前,托瓦斯将内核的发展方向分为两类,并根据这两类内核的发展分别给予不同的内核编号,那就是:

主、次版本为奇数:开发中版本。

如2.5.xx,这种内核版本主要用于测试与发展新功能,所以通常这种版本仅有内核开发工程师会使用。如果有新增的内核程序代码,会加到这种版本当中,等到很多工程师测试没问题后,才加入下一版本的稳定内核中;

主、次版本为偶数:稳定版本。

如2.6.xx,等到内核功能发展成熟后会加到这类版本中,主要用在一般家庭计算机以及企业版本中,重点在于提供一个用户相对稳定的Linux操作环境平台。

至于发布版本则是在主、次版本架构不变的情况下,新增的功能累积到一定程度后新发布的内核版本。而由于Linux 的内核是使用CPL的授权,因此大家都能够进行内核程序代码的修改。

因此,如果有针对一个版本的内核修改过的部分程序代码,那么这个被修改过的新内核版本就可以加上所谓的修改版本。

Linux内核版本与Linux发行版本。

Linux内核版本与发行版本的版本并不相同,因为所谓的Linux版本指的应该是内核版本,而目前最新的内核版本应该是4.7.2(2016/08)才对,并不会有7.x的版本出现。

扩展资料:

Linux内核的任务:

1、从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。

2、从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。在实际工作中内核抽象了相关细节。

3、内核是一个资源管理程序。负责将可用的共享资源(CPU时间、磁盘空间、网络连接等)分配得到各个系统进程。

4、内核就像一个库,提供了一组面向系统的命令。系统调用对于应用程序来说,就像调用普通函数一样。

参考资料来源:百度百科-Linux内核

参考技术A 1、根据版本的不同,内核大小也不同;我看了下最近发布的4.1.6版本下载80M左右,估计解压之后100多兆吧。
2、不同linux版本实际是根据内核封装了不同的操作系统,内核版本相同的情况下,不同linux版本内核实际是一样的,不同的是封装的操作系统。
3、https://www.kernel.org/给你个网站,是linux内核的官网,上面各个版本的内核都有;
4、附一下介绍吧:
Linux内核(英语:Linux kernel),是一种计算机操作系统内核,以C语言和汇编语言写成,符合POSIX标准,以GNU通用公共许可证发布。Linux内核最早是由芬兰黑客林纳斯·托瓦兹为尝试在自己的英特尔x86架构计算机上提供自由免费的类Unix系统而开发的。该计划开始于1991年,林纳斯·托瓦兹当时在Usenet新闻组comp.os.minix登载帖子[7],这份著名的帖子标示着Linux内核计划的正式开始。
在计划的早期有一些Minix的黑客提供了协助,而今天全球有无数程序员正在为该计划无偿提供帮助。
从技术上说Linux只是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核并不是一套完整的操作系统。有一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux(在该系统中包含了很多GNU计划的系统组件)。
Linux内核是在GNU通用公共许可证第2版之下发布的[4](加上一些非自由固件、blob与各种非自由许可证)。贡献者遍布世界各地,日常开发在Linux内核邮件列表。
参考技术B 源代码压缩后几十M,解压缩几百M吧?
源代码我记得之前有人统计,有几千万行。
编译出来,要看你开启的模块有多少,以及什么架构,是不是加入一些除错信息。

不同的版本区别。两个方向说。
1、发行版的不同,主要是对于版本的选择,稳定性的测试,还有错误修正补丁都会让每个发行版有自己特殊的内核。
2、官方内核的不同,这个区别很好说,官方的开发是基于 git 版本控制的,你去看两个 git 版本就知道了。一般是硬件支持,还有新的功能算法,还有驱动增减,错误修补什么的。
参考技术C 内核一般就几M, 内核一般可以认为都是相同的.追问

不可以改吗

追答

当然可以改, 要不然怎么是开源呢.
不同的发行版注重的都是用户的使用体验, 不需要也不必要在内核上下功夫吧

本回答被提问者采纳
参考技术D 内核小的几M大的几百M,可以自行编译的,前提是你会编译

linux下的io模型

1、用户态和内核态

因为操作系统的资源是有限的,如果访问资源的操作过多,必然会消耗过多的资源,而且如果不对这些操作加以区分,很可能造成资源访问的冲突。所以,为了减少有限资源的访问和使用冲突,Unix/Linux的设计哲学之一就是:对不同的操作赋予不同的执行等级,就是所谓特权的概念。简单说就是有多大能力做多大的事,与系统相关的一些特别关键的操作必须由最高特权的程序来完成。Intel的X86架构的CPU提供了0到3四个特权级,数字越小,特权越高,Linux操作系统中主要采用了0和3两个特权级,分别对应的就是内核态和用户态。运行于用户态的进程可以执行的操作和访问的资源都会受到极大的限制,而运行在内核态的进程则可以执行任何操作并且在资源的使用上没有限制。很多程序开始时运行于用户态,但在执行的过程中,一些操作需要在内核权限下才能执行,这就涉及到一个从用户态切换到内核态的过程

用户态和内核态的转换

a、系统调用

系统调用的本质其实也是中断,相对于外围设备的硬中断,这种中断称为软中断

b、异常

当CPU正在执行运行在用户态的程序时,突然发生某些预先不可知的异常事件,这个时候就会触发从当前用户态执行的进程转向内核态执行相关的异常事件,典型的如缺页异常。

c、外围设备的中断

当外围设备完成用户的请求操作后,会像CPU发出中断信号,此时,CPU就会暂停执行下一条即将要执行的指令,转而去执行中断信号对应的处理程序,如果先前执行的指令是在用户态下,则自然就发生从用户态到内核态的转换

总结:

内核态可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。

2、同步和异步的区别

同步io需要主动读写数据,在读写过程中会阻塞,异步io只需要读写完成的通知,读写操作由内核态完成

3、关于异步阻塞和异步非阻塞

异步阻塞,用户进程(线程)发起读写操作,在原地等待内核态返回读写完成的结果。此时阻塞整个进程
异步非阻塞,用户进程发起读写操作后,不在原地的等待内核态完成读写操作的结果。可以先去干点别的事

4、同步的几种io模型

以read为例

1、同步阻塞

1、进程发起read,进行recvfrom系统调用;

2、内核态准备数据

3、同时进程阻塞

4、阻塞直到数据从内核态copy到用户态,内核返回结果,进程解除阻塞。

总结:准备数据和数据copy两个阶段都阻塞。

技术分享图片

2、同步非阻塞

1、进程发起read操作,内核数据没有准备好,立刻返回一个error.

2、用户进程收到error,知道数据没有准备好,于是再次发起read操作,直到数据准备好。

3、用户进程收到数据准备好的信号,发送system call,copy数据,此时进程开始阻塞

4、数据copy完成,返回给用户进程解除阻塞。

总结:数据准备阶段,用户进程不断询问内核数据准备好了没,数据copy阶段进程阻塞

技术分享图片

3、io多路复用

1、用户进程调用select,进程阻塞,同时内核会监听所有select负责的socket.

2、当任何一个socket的数据准备好,select就会返回。

3、用户进程调用read操作,将数据从内核copy到用户进程。

总结:I/O 多路复用的特点是通过一种机制一个进程能同时等待多个文件描述符,而这些文件描述符(套接字描述符)其中的任意一个进入读就绪状态,select()函数就可以返回

如果处理的连接数不是很高的话,使用select/epoll的web server不一定比使用多线程 + 阻塞 IO的web server性能更好,可能延迟还更大。select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。
技术分享图片

select、poll、epoll的区别:

select 是不断轮询去监听的socket,socket个数有限制,一般为1024个;

poll还是采用轮询方式去监听,只不过没有个数限制。

epoll并不用采用轮询方式去监听,而是当socket有变化时通过回调方式主动告知用户进程。

select支持多平台,epoll只支持linux平台。

select实现ftp

import select
import socket

server = socket.socket()
server.bind((‘127.0.0.1‘, 9991))
server.listen(10)
server.setblocking(False)

r_list = [server, ]
w_list = []
w_data = {}

while True:
    rl, wl, xl = select.select(r_list, w_list, [], 0.5)
    print(wl)
    for sock in rl:
        if sock == server:
                conn, addr = server.accept()
                r_list.append(conn)
        else:
            try:
                data = sock.recv(1024).decode()
                if not data:
                    sock.close()
                    r_list.remove(sock)
                    continue
                w_list.append(sock)
                w_data[sock] = data.upper().encode()
    
            except Exception as e:
                print(e)
                sock.close()
                r_list.remove(sock)

selectors实现ftp

import selectors
import socket


def accept(obj, mask):
    conn,addr = obj.accept()
    sel.register(conn, selectors.EVENT_READ, read)
    

def read(obj,mask):
  
    try:
        data = obj.recv(1024).decode()
        if not data:
            sel.unregister(obj)
            obj.close()
            return
        print(data)
        obj.send(data.upper().encode())
    except Exception as e:
        print(e)
        obj.close()
        sel.unregister(obj)
    

server = socket.socket()
server.bind((‘127.0.0.1‘, 9990))
server.listen(10)
server.setblocking(False)
sel = selectors.DefaultSelector()
sel.register(server, selectors.EVENT_READ, accept)
while True:
    events = sel.select()
    for obj, mask in events:
        callback = obj.data
        callback(obj.fileobj, mask)

大量参考:
http://www.cnblogs.com/zingp/p/6863170.html
https://www.cnblogs.com/bakari/p/5520860.html





以上是关于Linux内核有多大,不同Linux版本内核有啥差别呢的主要内容,如果未能解决你的问题,请参考以下文章

linux下的io模型

linux网络常见概念

linux网络常见概念

LINUX系统需要多大的硬盘空间

如何查找或计算 Linux 进程的页表大小和其他内核记帐?

翻译下下面linux内核logo