精华内容
下载资源
问答
  • 内核什么

    2020-06-29 23:06:54
    内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。  内核是...

    内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

      内核是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用。我们将操作系统的代码分成2部分。内核所在的地址空间称作内核空间。而在内核以外的统称为外部管理程序,它们大部分是对外围设备的管理和界面操作。外部管理程序与用户进程所占据的地址空间称为外部空间。通常,一个程序会跨越两个空间。当执行到内河空间的一段代码时,我们称程序处于内核态,而当程序执行到外部空间代码时,我们称程序处于用户态。

    转载于:https://www.cnblogs.com/tkxja/p/7856169.html

    展开全文
  • 自动软件测试让您可以在一...  在对Linux内核版本稳定性的测试中,需要明确地声明并证明为什么版本是稳定的或者是不稳定的。然而还没有被证明和证实当前现有的系统范围内的压力测试可以测试Linux内核整体上的稳定性。
  • 兼容内核提高Linux市场竞争.pdf
  • 系统内核的洪荒之:挪动鼠标

    千次阅读 2016-10-18 19:45:36
    当我们获得鼠标发送的数据后,我们就可以根据相应的...前面我们看到,当鼠标被激活后,它会立马给内核发送一个字节数据,数值为0xfa, 当内核收到这个数据后,就可以开始积攒数据,每接收三个字节后,根据数据绘制鼠标。

    欲观看本章代码效果,请参看视频:
    Linux kernel Hacker, 从零构建自己的内核

    当我们获得鼠标发送的数据后,我们就可以根据相应的信息绘制鼠标,从而实现鼠标的挪动效果,在此之前,我们得了解,鼠标发送的数据是怎么解读的。

    鼠标发送的数据,必须三个字节连在一起解读,所以我们的内核要等待鼠标发送足够的数据后才可以采取行动。前面我们看到,当鼠标被激活后,它会立马给内核发送一个字节数据,数值为0xfa, 当内核收到这个数据后,就可以开始积攒数据,每接收三个字节后,根据数据绘制鼠标。

    这三个字节数据是有一定特点的,第一个字节0xab, a的数值必须在0-3这个范围内,由于a对应的是八比特中的高四位,所以这意味着该字节的第7,8两个比特位必须为0,b对应着八比特位中的低四位,它的值必须在8-F之间,这意味着该字节数据对应的第4个比特位必须为1.把第一个字节转换成二进制,那么它必须满足下面格式(X,*代表0或1):
    0 0 X X 1 * \ * *
    三个*用来表示鼠标按键,当鼠标的左键,滚轮,右键被按下时,对应的比特位会设置为1.

    第二个字节用来表示鼠标的左右移动,对该字节进行相应处理后,可以得到鼠标平移的坐标变换。

    第三个字节的数据表示鼠标的上下移动,对该字节进行相应处理后,可以得到鼠标垂直移动时的坐标数变化。

    我们专门设置一个结构体来处理鼠标发送的相关信息:

    struct MOUSE_DEC {
        unsigned char buf[3], phase;
        int x, y, btn;
    };

    buf[3]用来存储鼠标发送的三个数据,phase表示当前接收到第几个数据了,x表示水平移动的坐标变换,y表示上下移动时鼠标的坐标变换,btn用来表示鼠标哪个按键被按下了。

    内核中增加一个函数来解析鼠标发送的数据:

    int mouse_decode(struct MOUSE_DEC *mdec, unsigned char dat) {
        if (mdec->phase == 0) {
            if (dat == 0xfa) {
               mdec->phase = 1;
            }
    
           return 0;
        }
    
        if (mdec->phase == 1) {
            if ((dat & 0xc8) == 0x08) {
                mdec->buf[0] = dat;
                mdec->phase = 2;
            }
    
            return 0;
        }
    
        if (mdec->phase == 2) {
            mdec->buf[1] = dat;
            mdec->phase = 3;
            return 0;
        }
    
        if (mdec->phase == 3) {
            mdec->buf[2] = dat;
            mdec->phase = 1;
            mdec->btn = mdec->buf[0] & 0x07;
            mdec->x = mdec->buf[1];
            mdec->y = mdec->buf[2];
            if ((mdec->buf[0] & 0x10) != 0) {
               mdec->x |= 0xffffff00;
            }
    
            if ((mdec->buf[0] & 0x20) != 0) {
               mdec->y |= 0xffffff00;
            }
    
            mdec->y = -mdec->y;
            return 1;
        }
    
        return -1;
    }
    

    当收到字节0xfa的时候,系统进入数据收集阶段,当收到第一个数据时,判断字节是否符合前面所说的要求,符合的话,进入第二阶段,接收第二个字节,当进入第三阶段,接收完第三个字节后,开始对坐标数据进行处理,btn存储的是第一字节的低3位,它表示当前鼠标哪个按键被按下了,接着看第一字节的第5,第6个比特位,如果第5个比特位设置为1,那么第二字节需要做一些处理,也就是从第8位开始全部设置为1,至于为何要这么做,我们暂且不用关心,同理,如果第6个比特位设置为1,那么把第3个字节做一些处理才得到鼠标的垂直变换。

    由于鼠标给的垂直变换跟我们屏幕坐标是相反的,所以y值要去反。通过这一步我们就解析了鼠标发送过来的数据。

    在内核主函数中,我们要根据鼠标传输的数据重新绘制鼠标:

    static int mx = 0, my = 0;
    void CMain() {
    
       ....
    
       mx = (xsize - 16) / 2;
       my = (ysize - 28 - 16) / 2;  
       init_mouse_cursor(mcursor, COL8_008484);
       putblock(vram, xsize, 16, 16, mx, my, mcursor, 16);
    
      .....
    
       else if (fifo8_status(&mouseinfo) != 0) {
               show_mouse_info();
           }
    }
    
    void computeMousePosition(struct MOUSE_DEC* mdec) {
        mx += mdec->x;
        my += mdec->y;
        if (mx < 0) {
           mx = 0;
        }
    
        if (my < 0) {
           my = 0;
        }
    
        if (mx > xsize - 16) {
           mx = xsize - 16;
        }
        if (my > ysize - 16) {
           my = ysize - 16;
        }
    
    }
    
    void eraseMouse(char* vram) {
        boxfill8(vram, xsize, COL8_008484, mx, my, mx+15, my+15);
    }
    
    void drawMouse(char* vram) {
        putblock(vram, xsize, 16, 16, mx, my, mcursor, 16);
    }
    
    void  show_mouse_info(void) {
        char*vram = bootInfo.vgaRam;
        unsigned char data = 0;
    
        io_sti();
        data = fifo8_get(&mouseinfo);
        if (mouse_decode(&mdec, data) != 0) {
             eraseMouse(vram);
             computeMousePosition(&mdec);
             drawMouse(vram);
        }
    }

    eraseMouse 作用是使用桌面的背景颜色将鼠标抹掉, drawMouse是根据鼠标新的坐标重新绘制鼠标图案,show_mouse_info里,先将通过mouse_decode获得鼠标数据,然后通过调用eraseMouse将鼠标在当前位置抹掉,computeMousePosition重新计算鼠标移动后的新位置,drawMouse根据新位置重新绘制鼠标。

    将上面的C语言编译,然后反编译成汇编后,加入内核汇编模块,编译时会出现类似这样的错误:
    error: short jump is out of range

    这是因为在汇编语言中,跳转指令,例如jmp, jne等,跳转的距离不能超过127字节,但是由于我们现在的C语言使用了结构体等复杂数据结构,反汇编后,汇编代码语句会增多,从而造成jmp等指令所要跳转的目的地与当前指令间的距离超过127字节,解决办法是在指令出错的地方增添一个near关键字,例如语句:
    jmp ?0_57
    改成
    jmp near ?0_57
    那么上面错误就可以消除了,内核编译并加载如虚拟机后,鼠标便能灵动起来:
    这里写图片描述

    博客无法显示动态效果,请大家观看视频。

    展开全文
  • linux内核代码之什么是Linux staging tree

    千次阅读 2015-03-10 16:38:34
    在查看内核代码相关资料时总是碰到staging的相关字(XX Moved Out Of Linux Staging、YYstill in the staging tree)...索性就搜了一下什么是staging tree。 Greg Kh在2008年6月10号在Linux内核邮件列表里宣布建立了

    在查看内核代码相关资料时总是碰到staging的相关字眼(XX Moved Out Of Linux Staging、YYstill in the staging tree),搞的一头雾水。并且在内核drivers\staging目录下有很多代码模块,他们到底是做什么东东的?索性就搜了一下什么是staging tree。

    Greg Kh在2008年6月10号在Linux内核邮件列表里宣布建立了另外一棵kernel tree,没错,就是Linux staging tree。根据Greg的解释,staging tree建立之目的是用来放置一些未充分测试或者因为一些其他原因未能进入内核的新增驱动程序和新增文件系统。并且列出了哪些代码可以进入staging tree哪些则no way。


    以下是该邮件全文:

    DateTue, 10 Jun 2008 12:05:40 -0700
    FromGreg KH <>
    Subject[ANNOUNCE] linux-staging tree created
     


    Oh great, not yet-another-kernel-tree, just what the world needs...
    
    Yes, this is an announcement of a new kernel tree, linux-staging.  It is
    a quilt series of patches that can be found at:
    	git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
    
    
    In a long and meandering thread with some of the other kernel developers
    a week or so ago, it came up that there is no single place for companies
    and developers to put their code for testing while it gets cleaned up
    for submission into the kernel tree.  All of the different subsystems
    have trees, but they generally only want code that is about to go into
    this release, or the next one.  For stuff that is farther off, there is
    no place to go.
    
    So, here's the tree for it.  From the README:
    
    PURPOSE
    
    The linux-staging tree was created to hold drivers and filesystems and
    other semi-major additions to the Linux kernel that are not ready to be
    merged at this point in time.  It is here for companies and authors to
    get a wider range of testing, and to allow for other members of the
    community to help with the development of these features for the
    eventual inclusion into the main kernel tree.
    
    This tree will be included in the daily linux-next builds, and will get
    testing by all users of that tree.
    
    The rules of what can be included here is as follows:
    	- the code must be released under a Linux kernel-compatible
    	  license
    	- the goal of the developers must be to merge this code into the
    	  main kernel tree in the near future, but not for the next
    	  kernel release.
    	- the code must build properly on the x86 platform
    	- this is not a tree for bugfixes or rewrites of existing kernel
    	  code, this should be for new features, drivers, and
    	  filesystems.
    	- the patches included must detail exactly what is needed to be
    	  completed in order for them to be included into the main
    	  kernel tree.
    	- there must be some email address associated with the patch
    	  that can be used for bug reporting and questions about
    	  cleanups and testing the code.
    
    What this tree is not:
    	- it is not a place to dump features that are being actively
    	  developed by a community of people (reiserfs4 for example.)
    	- it is not a place to dump code and then run away, hoping that
    	  someone else will do the cleanup work for you.  While there
    	  are developers available to do this kind of work, you need to
    	  get someone to agree to "babysit" the code.
    
    
    I'll follow up this message with a list of the current status of the
    individual patches and what is currently contained in the tree.  I hope
    to release a status like this every week or so, depending on how the
    development goes.
    
    What I need from all of you:
      Kernel Janitors:
      	Here is the perfect way to get involved.  The code in this tree
    	is in desparate need of cleanups and fixes that can be trivially
    	found using 'sparse' and 'scripts/checkpatch.pl'.  I'll gladly
    	take these kinds of patches and of course, correctly credit you.
    
      Linux driver project developers:
    	Same as above, here's a great place to start out helping with
    	real code.  If any of you wants to take any of these drivers
    	over and become the primary contact point for them, just let me
    	know.
    
      Linux-next developers:
    	Stephen, I would really like this tree to be included in -next.
    	Yes, I know it contains things that will not be included in the
    	next release, but the inclusion and basic build testing that is
    	provided by your tree is invaluable.  You can place it at the
    	end, and if there is even a whiff of a problem in any of the
    	patches, you have my full permission to drop them on the floor
    	and run away screaming (and let me know please, so I can fix it
    	up.)
    
      Linux kernel developers:
    	If there are any external patches floating around for drivers
    	that need to be cleaned up and gotten into the kernel tree,
    	please point them out to me and I'll be glad to add them to this
    	tree and work to get them included.  Right now we are pushing:
    	 - 192 files changed, 131073 insertions(+), 651 deletions(-)
    	so what's a few more thousand lines of code :)
    
    Any questions?  Comments?
    
    thanks,
    
    greg k-h

    本次记录的重点当然不是解释什么是Linux staging tree。重点是Andrew Morton老先生那句the staging tree "is where code goes to be ignored."如果辩证的看待此问题,这些代码能进入Linux必定有其独特之处,只是未经时间检验或达到最佳设计效果。如果能够研究这些代码,一方面能够学习大牛们的编程技术和设计理念,再者,如果能对代码进行优化改进,也算是尽自己的微薄之力嘛。

    展开全文
  • 最近这几个月,不但出了好几个有潜力的新币,而且连新挖矿内核也层出不穷,它们对N卡矿机收益最高的几个币,展开了激烈的最高算争夺战。    T-Rex这个内核,无疑是众多新挖矿内核中,最优秀的一个,虽然出了没...

    最近这几个月,不但出了好几个有潜力的新币,而且连新挖矿内核也层出不穷,它们对N卡矿机收益最高的几个币,展开了激烈的最高算力争夺战。
      
      T-Rex这个内核,无疑是众多新挖矿内核中,最优秀的一个,虽然出了没多久,但在N卡矿机里,几个收益最高的币中,都是算力最高的挖矿内核。从刚开始崭露头角的BCD,到后来的SUQA中,都表演的十分的出色。
      在这里插入图片描述
      就在前几天,T-Rex0.7.3发布后没过多久,CryptoDredge也发出了0.9.6版本,并在公布中指出,该版本支持X22i算法,而且经过实测后发现,CryptoDredge 0.9.6比T-Rex 0.7.3的算力提高了10%以上,1080TI的单卡算力甚至已经达到了惊人的14Mh/s。
      在这里插入图片描述
      而早前时候,在Skunkhash算法的算力上,CryptoDredge内核版本优化后几天,T-Rex就发布新版本,对这个算法再次优化,反超CryptoDredge,对于这种情况,CryptoDredge再次发布新版本,CryptoDredge0.9.7版除了修复一些问题外,就是单单对Skunkhash算法的算力进行了优化,再次反超T-Rex。
      在这里插入图片描述
      从这两个内核最近发布的版本时间和算力优化情况,给到笔者的感觉,两个内核的作者其实都持有算力更高的版本,一直在做“测试”,而发布版本更多的是在自己的“收入”和其他矿工的“提成”中做选择。
      
      从现在的情况来看,CryptoDredge最近一段时间十分活跃,并且算力更新提升的也不错,是T-Rex的一个强而有力的对手,看来这两个内核这次少不了会进行一场龙争虎斗,很可能会造成一个版本更新的小高潮,各位矿工们需要时刻关注他们的内核更新信息,而我们也会以最快的速度更新智选矿工的挖矿内核。
     
    交流Q群:806956212

    展开全文
  • 随着HSPMiner2.0.2版的发布,HSPMiner正式加入了ETH这个币的内核中,虽然只是暂时只支持N卡,但作者已经说会相继继续开发出A卡版,所在HSPMiner2.0.2算是前菜,真正的主菜应该是A卡版了。    HSPMiner内核这次的...
  • 变,内核生命之源

    2009-05-05 11:58:00
    在lwn.net网站看到“2.6内核系列API的变化”一文,其中开始有一段中申明,内核开发者永不确保内部API是稳定的,即使在稳定版中。的确,这辛苦了内核开发者与驱动程序开发者。似乎,这与我们的常理相悖。通常,...
  • 内核和宏内核

    千次阅读 2011-08-31 09:42:28
    内核:多个进程通过(尽量小)内核转发消息. 宏内核:一个进程,直接调用 Linux大部分都是单内核的 操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些...
  • 摘抄之《linux内核注释》的一部分: Linux大部分都是单内核的 操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下: l 微内核(Microkernel ...
  • 操作系统开发--什么是内核

    千次阅读 2018-03-29 20:40:48
    操作系统内核是你永远看不到的。它基本上允许任何其他程序执行。它处理硬件事件(称为中断)、软件事件(称为系统调用)和管理资源的访问。硬件事件处理(中断)会获取到你刚才按下的键,并将按键转化为对应的字符并...
  • 操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下: 单内核:也称为宏内核。将内核从整体上作为一个大过程实现,并同时运行在一个...
  • 内核与微内核、Linux内核与Unix内核的区别

    万次阅读 多人点赞 2016-05-25 10:06:42
    操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下: 单内核:也称为宏内核。将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址...
  • 什么内核

    千次阅读 2010-07-15 14:13:00
    它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候 对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来...
  • 内核和微内核

    千次阅读 2017-04-15 20:54:59
    内核是个很大的进程。...单内核结构是非常有吸引的一种设计,由于在同一个地址空间上实现所有低级操作的系统控制代码的复杂性的效率会比在不同地址空间上实现更高些。单核结构正趋向于容易被正确设计,所
  • 什么是用户态和内核态 Kernel 运行在超级权限模式(Supervisor Mode)下,所以拥有很高的权限。按照权限管理的原则,多数应用程序应该运行在最小权限下。因此,很多操作系统,将内存分成了两个区域: 内核空间...
  • 对 Linux 内核进行压力测试

    千次阅读 2004-08-29 04:02:00
    Linux 标准测试的设计过程 级别: 初级 Robert Williamson (robbiew@us.ibm.com) 软件工程师, Linux Technology Center, IBM 自动软件测试让您可以在一段时间内运行相同的测试,从而... 内核进行压力所使用的测试的
  • 内核和单内核

    2014-10-09 22:36:18
     操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下:  微内核(Microkernelkernel)――在微内核中,大部分内核都作为单独的进程在特权状态...
  • linux 内核 中断亲和-affinity

    千次阅读 2013-01-10 10:56:25
    Linux 2.6 中断处理原理简介 ...内核在允许中断发生前,也就是在系统初始化时,必须把 IDT 表的初始化地址装载到 idtr 寄存器中,初始化表中的每一项。 当处于实模式下时,IDT 被初始化并由 BIOS
  • 内核分类

    2018-12-13 17:50:18
    内核分类 单内核 ​ 单内核是个很大的进程。它的内部又能够被分为若干模块(或是层次或其他)。但是在运行的时候,它是个单独的二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息...
  • 内核和微内核介绍

    千次阅读 2019-08-28 18:47:44
    内核和微内核的基本概念 宏内核:简单来说,就是把很多东西都集成进内核,例如linux内核,除了最基本的进程、线程管理、内存管理外,文件系统,驱动,网络协议等等都在内核里面。将内核从整体上作为一个大过程...
  • 这个文档描述非常详细,对内核,操作系统有较为深入的理解,通俗易懂
  • 内核与微内核

    千次阅读 2016-11-29 16:42:24
    内核是个很大的进程。...单内核结构是非常有吸引的一种设计,由于在同一个地址空间上实现所有低级操作的系统控制代码的复杂性的效率会比在不同地址空间上实现更高些。单核结构正趋向于容易被正确设计,所
  • 8 月初,当 Linux 5.8 RC 版本开放测试时,大多数的新闻都聚焦于它的大小,称其为“史上最大的内核版本”。正如 Linus Torvalds 本人指出的那样,“尽管没有任何一件事情能脱颖而出……但 5.8 似乎是我们有史以来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,280
精华内容 45,312
关键字:

内核力是什么