linux 第三周

linux内核目录结构

  • arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。
  • include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下。
  • init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。这是研究核心如何工作的好起点。
  • mm目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下。
  • drivers目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound。
  • ipc目录包含了核心进程间的通信代码。
  • modules目录存放了已建好的、可动态加载的模块。
  • fs目录存放Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3文件系统对应的就是ext3子目录。
  • Kernel内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel目录下。
  • net目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面。
  • lib目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下。
  • scripts目录包含用于配置核心的脚本文件。
  • documentation目录下是一些文档,是对每个目录作用的具体说明。

实验楼环境

cd Linuxkernel/

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

qemu:启动一个虚拟机平台
-kernel:给一个内核,操作系统
-initrd:驱动所需的硬盘
rootfs.img:放一个可执行文件由menuOS源代码编译成的init

进入menu系统,支持三个命令 help version quit

自己搭建

1、下载内核源代码编译内核(下载,解压,编译)

2、制作根文件系统(创建目录存放文件系统)

3、启动menuOS

三、分析start_kernel函数的执行过程

在init目录下的main.c有函数 ,其中包含start_kernel函数

基本所有模块,都需要start_kernel来进行初始化。

asmlinkage __visible void __init start_kernel(void)

其中,有init_ task,set_ task_ stack_ end_ magic(&init_task);这个是手工创建的PCB,0号进程,即最终的idle进程。

trap_init();//中断向量初始化
mm_init();//内存管理模块初始化
sched_init();//调度模块初始化
console_init();//控制模块初始化
rest_init(); //其他模块初始化

其中rest_ init()调用了 
-->kernel_ thread(kernel_ init, NULL, CLONE_ FS); 调用了
-->run_ init_ process(ramdisk_ execute_ command); 
//init是第一个用户态进程,是1号进程

pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
//创建了线程

在rest_init中,各部分启动完毕后,

   /* Call into cpu_idle with preempt disabled */

cpu_startup_entry(CPUHP_ONLINE); 

调用static void cpu_idle_loop(void);
里面有个while(1)

也就是在系统没有进程需要执行时就调度idle进程

总结下来:在start_ kernel启动后,rest_ init的中0号进程会一直存在。

时间: 2024-10-11 17:48:39

linux 第三周的相关文章

马哥linux第三周作业---基本班

1.列出当前系统上所有已经登陆的用户的用户名,注意:同一个用户登陆多次,则显示一次即可. who |cut -d' ' -f1 | sort | uniq 2.取出最后登陆到当前系统的用户的相关信息 w|tail-n1或者who|tail-n1 3.取出当前系统上被用户当做其默认shell的最多的那个shell cat /etc/passwd | awk -F':' '{print $7}'|uniq –c 结果为:/sbin/nologin awk -F':' '{a[$7]++}END{fo

Linux第三周作业

1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显    示一次即可.     [[email protected] ~]$  who | cut -d' ' -f1 | sort | uniq 2.取出最后登录到当前系统的用户的相关信息.      [[email protected] ~]$ who |tail -1 3.取出当前系统上被用户当作其默认shell的最多的那个shell.     [[email protected] ~]$ cut -d : -f7

Linux第三周

1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. [[email protected] ~]$ who | cut -d' ' -f1 | uniq root sihua 2.取出最后登录到当前系统的用户的相关信息. [[email protected] ~]$ w | tail -1 | awk '{print $1}' | id uid=500(sihua) gid=500(sihua) groups=500(sihua) 3.取出当前系统上被用户当

linux第三周作业(最终)

1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. who|cut -d " " -f1|sort -u 2.取出最后登录到当前系统的用户的相关信息. w|tail -1 3.取出当前系统上被用户当作其默认shell的最多的那个shell. sort -t: -k7 /etc/passwd|cut -d: -f7|uniq -c|sort -n|tail -1 4.将/etc/passw d 中的第三个字段数值最大的后10个用户的信息全部改为大写

Linux第三周(9.21-9.27)学习笔记

一.Vim的基本操作. Normal模式下 1.h 键 向左移动光标   2.  j  键  向下移动光标   3. k 键 向上移动光标 4. l键  向右移动光标 5.x 键  删除光标所在位置的字符 6.i 键  插入文本 7.dw 光标移至单词开头输入,删除整个单词 8.[number] +[command]+[object] 9.p 键 在光标处重新置入缓冲区内的字符 10.r +[字母] 可以替换光标处错误的单个字符 11 . [number]+ c + [object] 更改命令,

linux第三周-疲惫的感觉

shell通用 #!/bin/bash set -ue #正文,例如PATH=/data/shdir:$PATH set -- sed搜索命令 sed -n "/root/s/root/wei/p" /etc/passwd #-n 默认不打印 #root表示搜索内容 #s代表搜索替换 #p代表打印搜索替换的行 tar命令--打包 tar -Jcvf etc.tar.xz /etc #J打包压缩xz c创建文件 v查看过程 f查看生成的文件结果 #etc.tar.xz 生成的文件名 yu

马哥2016全新Linux+Python高端运维班第三周作业作答

                    马哥2016全新Linux+Python高端运维班第三周作业                                           1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可.     [[email protected] ~]# who | awk '{print $1 $NF}'| uniq -d     [[email protected] ~]# who     yicx     :0  

Linux内核设计第三周——构造一个简单的Linux系统

Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核源代码分析 arch/目录保存支持多种CPU类型的源代码 其中的关键目录包括:Documentation.drivers.firewall.fs(文件系统).include init目录:含有main.c,内核启动相关的代码基本都在init目录下 start_kernal()函数为启动函数,初始化内

20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS

Linux内核分析第三周  构造一个简单的Linux系统MenuOS 前提回顾 1.计算机是如何工作的三个法宝 1.存储程序计算机 2.函数调用堆栈 3.中断 2.操作系统的两把宝剑 中断上下文的切换 进程上下文的切换 第一讲  Linux内核源代码介绍 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录.PC机一般都基于此目录. init目录包含核心的初始化代码(不是系统的引导代