操作系统实验之编写内核 1.1 实验目的 学习和掌握Linux内核编译过程 1.2 实验内容 完成Linux内核编译过程 1.3 实验步骤 实验步骤如下: 1.将U盘挂载到redhat虚拟机如图3- .将linux-2.4.22.tar.gz文件复制到/usr/src路径下,输入cp linux-2.4.22.tar.gz /usr/src并cd /usr/src进入/usr/src路径如图3-7. 7.解压缩这个文件tar xzvf linux*22*并ls查看是否解压成功如图3-8至如图3-9. 8.输入cd *22并输入ls查看如图3-10. 9.输入vi Makefile查看文件源码如图3 3-36. 20.输入cat /proc/version显示为2.4.22版本如图3-37. 1.4 实验过程 图3-1 图3-2 图3-3 图3-4 图3-5 图3-6 图3-7 图3-8 图3-9 在编写内核重启时未命名自己的名字而重新又做了一遍,所以在使用reboot指令在选择内核页面会出现3个内核,在使用make modules编译内核模块以及make modules_install安装内核花了大量时间
1、内核分类 内核(Kernel)在计算机科学中是操作系统最基本的部分,主要负责管理系统资源。 中文版维基百科上将内核分为四大类: 单内核(宏内核); 微内核; 混合内核; 外内核。 这些非常模块化的用户态服务器用于完成操作系统中比较高级的操作,这样的设计使内核中最核心的部分的设计更简单。 然而后来的实验证明,纯微内核的系统实际上也可以是高效率的。大多数现代操作系统遵循这种设计范畴,微软公司开发的Windows操作系统就是一个很好的例子。 外内核 外内核系统,也被称为纵向结构操作系统,是一种比较极端的设计方法。 “老一点的操作系统都是宏内核的,也就是说,整个操作系统是一个运行在核心态的单独的a.out文件, 这个二进制文件包含进程管理,内存管理,文件系统以及其他。
最近逛开源社区,发现一个开源项目 flash-linux0.11-talk 把学习操作系统源码,写成了一部小说,把内核当小说看,挺爽的。 简介 品读 Linux 0.11 核心代码这个开源项目,作者以写小说的方式进行介绍操作系统核心代码,深入浅出的介绍了操作系统是怎样写出来的。 部分章节标题: 大纲 项目主要分为6大模块: 第一部分:进入内核前的苦力活 第二部分:大战前期的初始化工作 第三部分:一个新进程的诞生 第四部分:shell 程序的到来 第五部分:从一个命令的执行看操作系统各模块的运作 第六部分:操作系统哲学与思想 细节 该开源项目每章的内容都写的简洁明了,就比如第一回,写到的就两行代码: mov ax,0x07c0 mov ds,ax 图文并茂的讲解了具体是什么意思 可见作者是很用心的讲解操作系统源码 小结 想想我们看小说的时候是不是很爽,看这个开源项目也是一样,作者也是想要像写小说一样的把操作系统源码,生动有趣的展现给我们。快看起来像刷小说一样,一口气刷完它。
操作系统实验之编写内核模块 1.1 实验目的 学习和掌握模块加载机制,增加新的内核功能 1.2 实验内容 完成增加新的内核功能 1.3 实验步骤 实验步骤: 1.用记事本打开xxx.c按照实验五PPT Wall xxx.c编译并输入ls查看是否编译成功如图5-3至图5-4. 3.输入命令insmod xxx.o加载这个模块如图5-5. 4.输入命令lsmod查看系统中所有的模块如图5-6至图5-7. hello卸载模块并再次输入命令dmesg看系统日志如图5-10至图5-11. 1.4 实验过程 图5-1 图5-2 图5-3 图5-4 图5-5 图5-6 图5-7 图5-8 图5-9 图5-10 图5-11 1.5 心得体会 通过此次实验,我成功编写了操作系统的内核模块,因在核心态下运行故采用printk()函数,输入insmod加载此模块,结果显示loaded 表示加载成功,使用dmesg分别成功查看在自己添加内核模块后的系统日志,这次实验相比实验3和实验4显得较为简单但需有耐心,比如自己在操作规程中应该输入lsmod结果输入lsmode显示错误以及编译时gcc
limits.conf,添加如下内容(100000替换为自己想要的值) * hard nofile 100000 * soft nofile 100000 编辑文件/etc/sysctl.conf中的相关内核参数 接受缓存区预留内存最大值 默认值 128k # # net.unix.max_dgram_qlen 进程间通信发送数据, 默认10 # # net.ipv4.tcp_syncookies 只有在内核编译选择
CENTOS7作为常用的服务器系统,其正式版的内核都是相当保守的。 以下介绍以下升级最新版本的内核方法,目的是为了实现内核的BBR功能,改善CENTOS7的网络功能 BBR:Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 一、升级内核 1.1 查询内核版本: cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) uname -r 5.2.13-1.el7 .elrepo.x86_64 由以上可见,我使用的是CentOS 7.7版,内核为5.2.13 1.2 增加升级内核源 CentOS允许使用 ELRepo 第三方源升级内核版本。 https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.
文章目录 一、操作系统需要满足的要素 二、宏内核 三、微内核 四、Linux 内核动态加载机制 一、操作系统需要满足的要素 ---- 电脑上运行的 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要 为 用户 和 应用程序 管理并分配电脑的 硬件资源 , 如 CPU , 磁盘 , 内存 , 网络 等 ; 开发环境 : 操作系统 要为 应用程序 开发 提供配套环境 ; 执行环境 : 操作系统 要为 应用程序 执行 提供配套环境 ; 虚拟性支持 : 支持多进程 , 每个运行的应用程序进程 , 都可以感觉到有专门的处理器提供系统服务 ; 并发性支持 : 操作系统需要有 执行多个线程的能力 , 线程是独立运行 , 独立调度的最基本单位 ; 二、宏内核 ---- 宏内核 : 内核代码 编译成 二进制文件 , 内核 运行在 一个 大内核 地址空间 中 , 可以 直接 访问 , 调用 内核代码 - 微内核 : 将 操作系统 拆分成 多个 独立功能模块 , 这些 独立功能模块 之间通过 " 消息 " 进行通信 , 微内核 效率低 ; 下图中 , 进程 , 文件系统 , 设备驱动 , 与 微内核
2.2.1Windows7的基础知识 Windows 7 的主要特性有: 更简单 更安全 更好的连接 更低的成本 安装Windows7操作系统所需的硬件配置 Windows 7系统的软件需求只是指对硬盘系统的要求 3.窗口 Windows7操作系统及其应用程序采用图形化界面,只要运行某个应用程序或打开某个文档,就会对应出现一个矩形区域,这个矩形区域称为窗口。 Windows 7是一个多任务操作系统,允许多个程序同时运行,但是在某一时刻,只能有一个窗口处于活动状态。 6)更改桌面小工具 Windows7操作系统中自带了很多漂亮实用的小工具。 开启桌面小工具: (1)在桌面空白处右击,从弹出的快捷菜单中选择“小工具”命令,打开“小工具库”窗口。 2)“开始”菜单 “开始”菜单中存放着Windows 7 的绝大多数命令和安装到系统里面的所有程序,是操作系统的中央控制区域。
Centos 7 升级系统内核 我们使用 Linux 来表示整个操作系统,但严格地来说,Linux 只是个内核。 例如,当你计算机上运行的程序想要连接到无线网络时,它会将该请求提交给内核,后者又会使用正确的驱动程序连接到网络。 1、检查已安装的内核版本 让我们安装了一个发行版,它包含了一个特定版本的内核。 但是,这只会升级内核到仓库中可用的最新版本而不是在 www.kernel.org/ 中可用的最新版本。不幸的是,Red Hat 只允许使用前者升级内核。 [root@host-machine ~]# uname -r 5.14.0-1.el7.elrepo.x86_64 2、查看可以使用的内核列表 [root@host-machine ~ ) 7 (Core) 3、查看当前默认内核启动项 [root@host-machine ~]# grub2-editenv list saved_entry=1 4、更改默认启动内核项
目前 Linux 内核已经发布到 4.X(可以随时在 Linux 内核官网 查看当前版本),为了使用最新版本的内核,只好在安装 CentOS 7 后对内核进行升级。 使用 uname -r 区分你用的是官方内核还是 Linux 发行版内核,横线后面有任何东西都表示这不是官方内核: # uname -r 3.10.0-514.26.2.el7.x86_64 2. 例如 CentOS 7.2 中,通过 uname -r 查看内核版本时,会看到 3.10.0-514.26.2.el7.x86_64,表示对应的 Linux 内核版本是 3.10。 3.10.0-514.26.2.el7.x86_64 -v, –kernel-version:打印内核的版本。 -o, –operating-system:打印操作系统。 –help:显示这个帮助并退出。 –version:显示这版本信息并退出。
微内核操作系统 微内核操作系统,即实现了一个可在其上构建通用 OS 的基础内核,该内核程序运行在核心态,开机常驻内存。 当前微内核操作系统结构仍没有一致公认的定义,但可从以下4方面进行描述: 足够小的内核:微内核并非一个完整的OS。 与此同时,也必然改善系统的灵活性,不仅可在操作系统中增加新的功能,还可修改原有功能,以及删除已过时的功能,以形成一个更为精干有效的操作系统。 3) 可移植强 在微内核结构的操作系统中,所有与特定CPU和I/O设备硬件有关的代码,均放在内核和内核下面的硬件隐藏层中,而操作系统其它绝大部分(即各种服务器)均与硬件平台无关,因而,把操作系统移植到另一个计算机硬件平台上所需作的修改是比较小的 缺点 效率相对较低: 在微内核OS中,由于采用了非常小的内核,以及客户/服务器模式和消息传递机制,这些虽给微内核OS带来了许多优点,但由此也使微内核OS存在着潜在的缺点。
1.2 内核程序 在操作系统中,我们可以将其按照功能划分成两部分:内核功能与非内核功能。 ,而这些程序就位于操作系统的内核中。 当我们要运行这些内核程序时,就需要CPU处于内核态。 按照操作系统的内核架构,我们又可以将其进一步划分为:宏内核和微内核。 三、微内核 随着体系结构和应用需求的不断发展,需要操作系统提供的服务越来越复杂,操作系统设计规模急剧增长,操作系统也面临着“软件危机”困境。 那些移出内核的操作系统代码根据分层的原则被划分成若干服务程序,它们的执行相互独立,交互则都借助与微内核进行通信。 微内核结构将操作系统划分为两大部分:微内核和多个服务器。
操作系统内核并不知道它的存在,它完全是在用户空间中创建。 用户级线程有很多优势,比如。 管理开销小:创建、销毁不需要系统调用。 切换成本低:用户空间程序可以自己维护,不需要走操作系统调度。 可以利用多核 CPU 优势:内核拥有较高权限,因此可以在多个 CPU 核心上执行内核线程。 操作系统级优化:内核中的线程操作 I/O 不需要进行系统调用;一个内核线程阻塞了,可以立即让另一个执行。 切换成本较高:切换的时候,也同样存在需要内核操作,需要切换内核态。 用户态线程和内核态线程之间的映射关系 线程简单理解,就是要执行一段程序。程序不会自发的执行,需要操作系统进行调度。 相当于进程主线程的延展,使用的是操作系统分配给进程主线程的时间片段。内核线程由内核维护,由操作系统调度。 内核线程可以独立执行,操作系统会分配时间片段。因此内核态线程更完整,也称作轻量级进程。内核态线程创建成本高,切换成本高,创建太多还会给调度算法增加压力,因此不会太多。
配置WinDbg,调试操作系统(双机调试) PS: 设置双机调试之前,请先安装虚拟机,并且安装好XP系统.这里不做演示.直接设置. 4) 点击完成,再点击确定完成串行端口的添加 三丶虚拟机中的操作系统的设置 1) 启动VM的操作系统,打开C盘,设置文件下选项,设置为不隐藏系统文件,查看所有隐藏文件 ? 6) 设置完保存重新启动操作系统,选择启动调试程序,进入操作系统 ? ? 7) 运行我们刚才创建的Windbg快捷方式,连接成功 ?
如果启动项多于2个,说明当前系统有旧内核未删除。原因是CentOS更新后不会自动删除旧内核。 默认以新内核启动,可以在启动选项中临时选择,也可以修改配置永久指定。 [root@controller ~]# uname -r #查看当前内核 3.10.0-862.3.2.el7.x86_64 [root@controller ~]# grub2-editenv list # 默认内核已是最新版 saved_entry=CentOS Linux (3.10.0-862.3.2.el7.x86_64) 7 (Core) [root@controller --unrestricted $menuentry_id_option 'gnulinux-3.10.0-862.el7.x86_64-advanced-2e7f2bc7-8c8f-47f7-905d- [root@controller ~]# yum remove kernel-3.10.0-862.el7.x86_64 #删除旧内核 或者rpm -e kernel-3.10.0-862.el7
import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org yum install https://www.elrepo.org/elrepo-release-7. el7.elrepo.noarch.rpm 列出可用的内核相关包 # kernel-lt:长期支持版本,用于修复旧版内核的 BUG,这些内核只会修复重大 BUG,并且不会频繁发布版本。 配置内核 make menuconfig # 老的ncurses界面,被nconfig取代 make nconfig # 新的命令行ncurses界面 编译内核 make -j 4 安装内核模块 uname -r ---- 卸载新内核 删除/lib/modules/目录下对应版本的库文件 删除/usr/src/linux/目录下的源码和压缩文件 删除/boot/启动的内核和内核镜像文件 删除grub.cfg 配置文件新内核对应的条目
对于 CentOS 5.× 和 6.× 的系统我们在更新后需要重新安装应用程序恢复数据, CentOS 7.× 不需要这么麻烦,可以直接升级。 升级 CentOS 7.× 内核,启用 ELRepo,要在 CentOS 7.× 上启用 ELRepo 仓库,请运行: rpm --import https://www.elrepo.org/ RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm 图片.png 根据实际设置需要默认启动的内核,此处设置kernel-ml-4.17.4-1.el7.elrepo.x86_64为默认启动的内核,命令如下: grub2-set-default 'CentOS Linux (4.17.4-1.el7.elrepo.x86_64) 7 (Core)' 设置完成后使用下面命令查看是否设置成功: grub2-editenv list 如图:
Linux系统版本 命令1:lsb_release -a lsb_release解析 命令2: cat /etc/issue 命令3: cat /etc/redhat-release 2.查看Linux内核版本 [root ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 2.查看Linux内核版本 命令1: uname -a [root ~]# uname -a Linux iZbp13nq1pxf5wki525wiuZ 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC /proc/version [root@iZbp13nq1pxf5wki525wiuZ ~]# cat /proc/version Linux version 3.10.0-1160.45.1.el7. ~]# cat /proc/cpuinfo| grep "processor"| wc -l 4 [root@iZj6c7q37rfjtps4h88ieoZ ~]# lscpu Architecture
需求:由于客户容器化的需要,需要将当前的操作系统升级为5.10.7的版本。 内核升级操作步骤如下: 步骤一:载入公钥、安装elrepo rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http kernel-ml.x86_64 kernel-ml-tools.x86_64 yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 步骤四:查看系统上的所有可用内核 -25 ~]# vim /etc/default/grub 步骤五:设置开机从新内核启动 方法1: grub2-set-default 0 方法2: 编辑配置文件 vim /etc/default/grub 步骤六:运行grub2-mkconfig命令来重新创建内核配置 grub2-mkconfig -o /boot/grub2/grub.cfg 步骤七、重启动、查看内核、更新 reboot uname -
自从红帽公司单方面宣布终止CentOS的开发后,我们腾讯云的用户也逐步开始将应用迁移到其它操作系统上。 由于CentOS 7的维护终止日期在2024年6月30日,距离当前还有一段时间,所以还有少量客户在继续使用着该版本。在为客户解决现网问题的过程中,我们发现因为内核缺陷导致操作系统崩溃的情况时有发生。 测试环境总结如下:硬件环境:机型为GN7.2XLARGE32,含一张共享的NVIDIA T4 GPU卡操作系统:centos7.6.0 x64,内核版本3.10.0-1160.71.1.el7.x86_ 我们按照提示进行了升级[7],升级后相应的GPU驱动程序也升级到了525,如下图所示:通过Git下载CUDA测试程序,进入目录后运行make即可编译程序。 在出现的云硬盘列表中点击操作系统所在磁盘,并移到“本地硬盘快照”项,可以看到旁边有一个“创建快照”功能。点击进入功能页面后创建一个快照。该快照可以用于将来恢复操作系统。