精华内容
下载资源
问答
  • Linus在最初开发Linux操作系统内核时, 主要参考了3本书: M. J. Bach著的UNIX操作系统设计. 该书描述了UNIX System V内核的工作原理和数据结构, 是一本很好的内核工作原理方面的参考书. Linus使用了该书中许多函数...

    Linus在最初开发Linux操作系统内核时, 主要参考了3本书:

    1.  M. J. Bach著的UNIX操作系统设计.  该书描述了UNIX System V内核的工作原理和数据结构, 是一本很好的内核工作原理方面的参考书.   Linus使用了该书中许多函数的算法, Linux内核源代码中很多重要函数的名字都取自该书.
    2. John H. Crawford等著的Programming the 80386.  该书讲述80x86下保护模式编程方法.
    3. Andrew S. Tanenbaum著的MINIX操作系统设计与实现.  Linus主要使用了该书中描述的MINIX文件系统1.0版.
    展开全文
  • 一、程序运行时堆栈的变化以及相关的知识,我已在《Linux操作系统分析》之分析计算机如何启动以及如何工作运行这篇博客中分析过,请没看过的同学点击链接。 二、进程是一个具有独立功能的程序关于某个数据集合的一...
    本篇文章分析的是一个经过精简后的Linux系统,通过对中断和时间片轮询的分析。来说明系统中进程的启动和进程的切换机制。
    
    相关知识
    首先关于这篇文章会介绍一些用到的知识。
    一、程序运行时堆栈的变化以及相关的知识,我已在《Linux操作系统分析》之分析计算机如何启动以及如何工作运行这篇博客中分析过,请没看过的同学点击链接。
    二、进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。如果有同学对进程和线程不是太明白的话。请参考阮一峰老师的进程与线程的一个简单解释
    三、中断简单的来说就是在你做一件事的时候,被打断去执行其他的事情。举个日常生活中的例子,比如说我正在厨房用煤气烧一壶水,这样就只能守在厨房里,苦苦等着水开——如果水溢出来浇灭了煤气,有可能就要发生一场灾难了。等啊等啊,外边突然传来了惊奇的叫声“怎么不关水龙头?”于是我惭愧的发现,刚才接水之后只顾着抱怨这份无聊的差事,居然忘了这事,于是慌慌张张的冲向水管,三下两下关了龙头,声音又传到耳边,“怎么干什么都是这么马虎?”。伸伸舌头,这件小事就这么过去了,我落寞的眼神又落在了水壶上。门外忽然又传来了铿锵有力的歌声,我最喜欢的古装剧要开演了,真想夺门而出,然而,听着水壶发出“咕嘟咕嘟”的声音,我清楚:除非等到水开,否则没有我享受人生的时候。请参考下面的文章点击链接
    四、时间片轮询算法。这是计算机调度的方法之一。通过为程序分配指定的时间,来控制程序执行的时间。通过时间片的概念实现同步的,也就是程序的并发。举个例子:当你在打台球的时候,一般是两个人进行游戏。当有三个人的时候,每人五个球,如果你打进球了,就继续打下一杆。否则就轮到下一个人打。在这个例子中如果都没打进球的话,三个人是轮流评分时间执行,但是如果打进球的话,就相当于把打进球者的优先级提高,可以再执行一次。
    接下来我用一个例子来进行分析。这个例子所用到的代码,已经环境的配置信息等可以在mykernel中获得。
    分析过程
    下面的是mypcb.h中的一部分代码。用来模仿系统中存放进程的管理和控制信息的数据结构即进程控制块(PCB Process Control Block)。

    ip:记录CPU的地址(即%eip的值)。
    sp:栈顶地址。
    结构体PCB中为记录程序的信息,用来保存现场和恢复现场的数据。
    my_schedule函数用来模拟调度函数。
    在mykernel.c中包含一下函数:
    void my_process(void); 模拟程序
    unsigned long get_rand(int ); 得到一个随机数
    void sand_priority(void) 模拟出进程的优先级
    void __init my_start_kernel(void) 模拟内核程序
    以上有所函数的执行过程大概如下:
    运行mykernel进入到该函数(如何知道进入mykernel可以参考为什么主引导记录的内存地址是0x7C00),首先执行以下的代码:

     对第一个进程的PCB进行赋值。
    /*fork more process */
        for(pid=1;pid<MAX_TASK_NUM;pid++)
        {
            memcpy(&task[pid],&task[0],sizeof(tPCB));
            task[pid].pid = pid;
            task[pid].state = -1;
            task[pid].thread.sp = (unsigned long)&task[pid].stack[KERNEL_STACK_SIZE-1];
    	task[pid].priority=get_rand(PRIORITY_MAX);//each time all tasks get a random priority
        }

     上面的代码将第一个进程进行复制,而后修改一些基本信息。
    asm volatile(
         "movl %1,%%esp\n\t" /* set task[pid].thread.sp to esp */
         "pushl %1\n\t" /* push ebp */
         "pushl %0\n\t" /* push task[pid].thread.ip */
         "ret\n\t" /* pop task[pid].thread.ip to eip */
         "popl %%ebp\n\t"
         :
         : "c" (task[pid].thread.ip),"d" (task[pid].thread.sp)	/* input c or d mean %ecx/%edx*/
    );
    上面的汇编代码,将进行操作栈和实现操作eip。此后进入到my_process函数执行进程的任务。
    通过myinterrupt.c中的my_timer_handler函数可以对my_need_sched = 1;进行赋值,以此来模拟进程是否需要调度。如果需要调度的时候,进入到my_schedule(); 。在这里保存了当前的进程和接下来要执行的进程,通过分析剩下进程的优先级,来选择出一个优先级高的进程作为下一个需要执行的进程。
    然后通过判断next进程是否你一执行来选择:(1)执行next进程(2)将next置为可执行,在选择新的进程进行执行。返回到my_process函数执行进程的任务。
    如此重复该过程,实现进程的切换机制。
    执行过程截图如下:

     

     

     

     

     总结
    简单来讲,操作系统启动的时候,通过写到BIOS中的主引导项,选择进入系统。进入到系统之后,通过重复循环,等待执行进程。如果有多个进程的时候,操作系统通过调度算法为选中的进程分配系统资源。如果需要进行进程的切换的话,通过中断机制进行打断程序的执行,而后通过保存现场和恢复现场来恢复需要执行的进程。在这里也只是简单的介绍了操作系统的中断和进程切换。如果有不对的地方,请大家指教,相互学习,共同进步。


    杨峻鹏 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 
    展开全文
  •  今天要做是的搭建Linux内核调试环境。 环境:Ubuntu13.04 gcc4.7.3 安装QEMU QEMU简介 QEMU是一套由Fabrice Bellard所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。Bochs,...


    提要

       继续学习Linux.

        今天要做是的搭建Linux的内核调试环境。

    环境:Ubuntu13.04 gcc4.7.3


    安装QEMU

    QEMU简介

    QEMU是一套由Fabrice Bellard所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。Bochs,PearPC等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过KQMEU这个开源的加速器,QEMU能模拟至接近真实电脑的速度。


    最简单的方法就Ubuntu的软件中心安装:



    找不到的话可以尝试更新源,然后update。

    其他发行版的linux可以从源码进行安装 - http://wiki.qemu.org/Main_Page


    编译linux的内核

    之前有一篇文章介绍内核编译的,可以参考-Linux操作系统分析(4)- 更新内核与添加系统调用

    这里需要重新编译一下,添加调试信息。

    首先下载最新版本的内核

    https://www.kernel.org/pub/linux/kernel/v3.x/

    下载linux-3.9.tar.gz

    解压后终端进入文件夹,执行:

    make menuconfig  

    在Kernel hacking项目里面将Compile the kernel with debug info和Compile the kernel with frame pointers,两项勾选。这些项目可以让编译时添加调试信息,类似我们平时用的-g选项。

    接着执行:

    make -j2 bzImage

    编译内核,我的是双核的cpu,所以是 -j2,四核的话 -j4。


    进行调试

    http://wiki.qemu.org/Testing下载linux-0.2.img.bz2,解压后丢到linux源码的目录下。

    终端执行:

    qemu -S -kernel arch/i386/boot/bzImage -hda linux-0.2.img -append "root=dev/hda"
    

    # -kernel 用来指定内核,注arch/x86/bzImage是不带调试信息的内核,vmlinux是带有调试信息的内核.

    #-hda 指定IDE硬盘

    #-append  cmdline use 'cmdline' as kernel command line

    之后弹出一个小黑窗口,qemu就算起来了。

    ctrl+alt+1 与 ctrl+alt+2可以切换界面,前者是屏幕输出,后者是qemu控制台

    运行起来后是黑屏,我们要切换到控制台,用鼠标点击窗口,然后ctrl+alt+2,





    在QEMU的命令行中 运行:

    gdbserver tcp::1234
    启动gdbserver,并在tcp的1234端口监听,-S表示在开始的时候冻结CPU直到远程的gdb输入相应的控制命令



    新起一个终端,用gdb调试vmlinux.

    gdb vmlinux
    target remote localhost:1234

    设置一下断点,跑一下。


    软件开发技巧

            现在 QEMU 已安装并运行客户操作系统,现在可以开始开发软件。既可用模拟器下的原有编译器,也可用主机上的跨编译器。对于需要在客户操作系统反复编译和测试软件的大型开发项目,跨编译器可能更快,但其安装配置已超出本文范围。模拟器下运行的编译器适合于小型项目,或不经常编译软件的项目。
    对于软件,计算机就像是目标平台的真实例子,可用于最实际的用途。一些特性,如字节顺序、CPU 一致性以及其他硬件基本特性就像在一台真实计算机上一样运行正常。我使用过真实的 PowerPC Apple iMac 和基于 QEMU 的 PowerPC 系统开发和测试全局惟一标识符(GUID)分区表(GPT) fdisk 程序的 PowerPC 版本,该程序需要知道 CPU 的字节顺序,在我看来,基于 QEMU 的系统与真实的 iMac 别无二致,除了 QEMU 系统有些慢。
            这说明,如果深入探究,确实有些差异。例如,QEMU 的模拟硬盘会返回 “QEMU HARDDISK” 的模式字符串,与真实的硬盘驱动器不同。总的来说,QEMU 的虚拟硬盘有些过时;硬盘都是 PATA 或 Small Computer System Interface (SCSI) 设备,这根据具体平台,视频硬件也过时了。可以在 QEMU 文档中找到虚拟硬件的详细信息。请注意各个版本的详细信息都不同。
           在 Linux 下,QEMU 会话占用很少的 CPU 时间,除了客户操作系统工作时。但 QEMU 会话会占用指定给它的 RAM 容量。因此,从实际出发,需要给主机系统大量内存,尤其是打算同时运行多于一个或两个 QEMU 会话时。


    参考

    利用qemu进行内核源码级调试 - http://blog.csdn.net/gdt_a20/article/details/7231652

    展开全文
  • 所谓内核优化,主要是在Linux系统中针对业务服务应用而进行的系统内核参数优化,优化并无特殊的标准,下面以常见生产环境linux的内核优化为例讲解,仅供大家参考:打开/etc/sysctl.conf把以下要修改的内核参数加入...
    • 摘要:Linux服务器内核参数优化高并发linux生产服务器内核参数优化案例说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整。所谓内核优化,主要是在Linux系统中针对业务服务应用而进行的系统内核参数优化,优化并无特殊的标准,下面以常见生产环境linux的内核优化为例讲解,仅供大家参考:打开/etc/sysctl.conf把以下要修改的内核参数加入配置文件的最后[aliyunzixun@xxx.comscripts]#vi/etc/

    • Linux服务器内核参数优化

      高并发linux生产服务器内核参数优化案例

      说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整。

      所谓内核优化,主要是在Linux系统中针对业务服务应用而进行的系统内核参数优化,优化并无特殊的标准,下面以常见生产环境linux的内核优化为例讲解,仅供大家参考:

      打开/etc/sysctl.conf把以下要修改的内核参数加入配置文件的最后

      [aliyunzixun@xxx.com scripts]# vi /etc/sysctl.conf

      net.ipv4.tcp_fin_timeout = 2

      net.ipv4.tcp_tw_reuse = 1

      net.ipv4.tcp_tw_recycle = 1

      net.ipv4.tcp_syncookies = 1

      net.ipv4.tcp_keepalive_time = 600

      net.ipv4.ip_local_port_range = 4000 65000

      net.ipv4.tcp_max_syn_backlog = 16384

      net.ipv4.tcp_max_tw_buckets = 36000

      net.ipv4.route.gc_timeout = 100

      net.ipv4.tcp_syn_retries = 1

      net.ipv4.tcp_synack_retries = 1

      net.core.somaxconn = 16384

      net.core.netdev_max_backlog = 16384

      net.ipv4.tcp_max_orphans = 16384

      #以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。

      net.ipv4.ip_conntrack_max = 25000000

      net.ipv4.netfilter.ip_conntrack_max=25000000

      net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180

      net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120

      net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60

      net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120

      [aliyunzixun@xxx.com scripts]# sysctl -p

      重新加载内核参数


    以上是linux操作系统实践优化内核参数优化讲解的内容,更多 优化 内核 讲解 操作系统 实践 参数 Linux 的内容,请您使用右上方搜索功能获取相关信息。
    展开全文
  • 提要  今天的主题是“破解Linux操作系统的奥秘”,标题虽然有点玄乎,但决不忽悠。...Linux操作系统分析(3)- 内核装载ELF的过程总结 sa1****310 **涛 存储程序计算机的概念 现代计算机的基本结
  • 直接安装的系统内核版本一般不是最新,用 uname -a 命令可以查看内核的版本号,比如我的就是: 下面来手动更新内核到最新的稳定版本。 1.获取源码 进入kernel.org,下载最近版本内核源码, ...
  • linux内核配置系统分析

    千次阅读 2007-01-10 09:41:00
    随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开发中。面对日益庞大的 Linux 内核源代码,开发者在完成自己的内核代码后,都将面临着同样的问题,即如何...
  • Linux 系统内核崩溃分析处理简介

    千次阅读 2020-03-20 08:25:00
    作者:arstercz来源(阅读原文可直达):https://blog.arstercz.com/brief-intro-to-linux-kernel...
  • Linux操作系统基础(完结)

    万次阅读 多人点赞 2016-03-09 21:00:45
    一、Linux操作系统概述 二、Linux操作系统安装 三、Linux文件系统及文件基础 四、Linux操作系统命令使用基础 五、Linux应用程序的安装与卸载基础 五、用户及进程 六、相关信息查询 七、网络配置 八、Linux...
  • Linux内核中断系统处理机制-详细分析

    万次阅读 多人点赞 2018-08-23 23:09:24
    Linux内核中断 一、中断概述 中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再...
  • 本文介绍了Linux内核的启动过程,分析系统的关键部分代码从而可以让大家从一个大体上谅解Linux的启动过程,本人也是Linux的菜鸟级别。网络上很多的分析不太好动希望同属于初学者,这篇文章对大家有所帮助
  • 转自:... ...参考如下的文章,多谢原文作者 https://access.redhat.com/site/articles/3078 http://blog.sina.com.cn/s/blog_8d5cd40201017z14.html 在如上的文章基础
  • linux网络协议栈内核分析

    万次阅读 多人点赞 2016-06-04 15:21:49
    1. Linux 网络路径 1.1 发送端 ...Linux Socket 是从 BSD Socket 发展而来的,它是 Linux 操作系统的重要组成部分之一,它是网络应用程序的基础。从层次上来说,它位于应用层,是操作系统为应用程序
  • Linux内核下载地址】 1、 解压内核linux-3.14.tar.xz拷贝到/home/linux下并解压 $tar xvf linux-3.14.tar.xz $ cd linux-3.14 2、 修改内核顶层目录下的Makefile $ vim Makefile 修改: 为...
  • 本文介绍了如何通过两种方式实现一个系统调用的。一种是通过系统API函数的方式实现,另外一种通过软中断int0x80来实现,通过软...禹晓博+ 原创作品转载请注明出处 + 欢迎加入《Linux内核分析》MOOC网易云课堂学习yiw哦
  • Linux操作系统的诞生与其对现代信息世界的影响

    千次阅读 多人点赞 2020-05-19 11:12:11
    Linux是上个世纪九十年代诞生的一个操作系统内核,它在开源社区发布,经过几十年发展,从Linux内核衍生出了许多发行版本。当前,Linux各个完整的发行版本,已经广泛应用于不同的应用环境。在Linux操作系统在各领域...
  • 操作系统内核的绝佳学习材料——JOS ...因为个人之前曾系统学习过Linux 0.11内核(《操作系统内核Hack:(四)内核雏形》,实现到时钟中断部分停下了),深知自己从零开始实现内核的工作量。即便是如我个人实
  • Linux 内核系统架构

    千次阅读 多人点赞 2019-09-17 02:55:13
    描述Linux内核的文章已经有上亿字了但是对于初学者,还是应该多学习多看,毕竟上亿字不能一下子就明白的。即使看了所有的Linux 内核文章,估计也还不是很明白,这时候,还...
  • 为了调查清楚麒麟操作系统内核自主创新的百分比,以及与其它操作系统之间的关系,我将麒麟操作系统内核与FreeBSD、NetBSD、OpenBSD、Linux和Solaris的内核进行了可执行代码的相似度分析。 在 整个过程中,我将...
  • 作者:徐恒 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 实验环境:c+Linux64位 (32位系统可能结果会不同) ...实验主要分析Linux内核的启动流程
  • 本文介绍了系统调用的一些实现细节。首先分析系统调用的意义,它们与库函数和应用程序接口(API)有怎样的关系。然后,我们考察了Linux内核如何实现系统调用,... 参考Linux内核设计与实现》读书笔记(五)- 系统
  • Linux 内核 SCSI IO 子系统分析

    千次阅读 2015-07-30 21:57:54
    Linux 内核 SCSI IO 子系统分析 研究 LINUX 内核中 SCSI 子系统处理 IO 的过程 本文基于 LINUX2.6.18 内核,从 SCSI 设备访问请求的提交,SCSI 命令的处理、错误恢复几个方面浅析了 LINUX 内核中 SCSI...
  • Linux内核Makefile分析

    万次阅读 2016-05-20 19:52:40
    Linux内核中的Makefile虽然复杂,但是它的目的和作用与简单的Makefile都是一样的,无非是将文件编译,链接。它复杂在Linux内核文件太多,包括各种架构、各种设备,如何根据用户需求把它们巧妙的联系在一起,是Linux...
  • Linux操作系统课后参考答案

    万次阅读 2017-10-16 19:43:37
    1.Linux采用什么版权方式发行?这种版权与通常的商业软件有何区别? 答:Linux采用GPL版权方式发行,即GeneralPublic License。 这种版权与通常的商业软件区别如下:  Linux是免费的,但是其他的“UNLX们”都及其...
  • Linux内核源码分析方法

    千次阅读 2013-11-28 09:54:20
    编者话:以下是刚接触内核三个月的同学,通过对一个内核特性的分析,总结出一套分析内核的方法。 一、内核源码之我见 ...如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道
  • Linux内核源代码情景分析笔记

    万次阅读 2017-03-10 22:24:44
    Linux内核源代码情景分析笔记好吧,首先我承认我要是读者的话,这篇文章我看着也头疼,因为写的太长太泛(其主要部分集中在内存管理,进程管理,文件系统)!原本是想按自己理解的精简精简的,按照操作系统中两个...
  • Linux内核分析内核编程

    千次阅读 2005-09-10 08:26:00
    倪继利著2005年8月出版ISBN 7-121-01518-5900页88.00元(估价)倪 倪继利著2005年8月出版ISBN 7-121-01518-5900页88.00元(估价)倪 内 容 简 介 ...主要分析Linux最新版本(2.6.11)的内核源代码,帮助读者深入
  • Linux桌面操作系统性能分析学习总结

    千次阅读 2015-01-14 16:46:29
    1.什么是计算机性能 所谓计算机的性能(Performance)通常是指计算机的速度,它是程序执行时间的倒数。而程序执行时间是指用户向计算机送入一...2.Linux桌面操作系统性能分析意义 1.操作系统的性能直接影响了其上应用系
  • Linux 系统内核的调试

    千次阅读 2006-01-24 10:47:00
    Linux 系统内核的调试

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,430
精华内容 65,372
关键字:

linux操作系统内核分析参考

linux 订阅