1672_MIT 6.828 xv6中如何通过构建环境让系统中增加一个可执行调用文件

news/2024/4/29 4:14:35/文章来源:https://blog.csdn.net/grey_csdn/article/details/130037948

         全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         前面已经分析了如何实现一个系统调用,这个过程的梳理也已经整理成了一份学习笔记。这一次看一下,如何让OS的系统中增加这样的一个可执行的文件。还是以date这个命令为例。

         系统启动之后,多了一个date文件,这个跟我们的命令是对应的。那么,有一个奇怪的地方就需要注意了。

         Makefile之中,这个命令其实是带有一个下划线作为前缀的。那么,这样的一个冲突是如何解决的呢?

         即使是查看编译链接之后的结果,其实也是可以看到这个前缀的。那么,这样的冲突在整个构建过程中是通过什么方式来处理掉的呢?是xv6本身具备这样的功能吗?其实不然!分析一下xv6的构建环境会发现,其实这个功能的实现是基于unix系统中的C语言来实现的。整个处理机制是C语言写的,编译成了可执行文件之后处理实现了这样的转换过程。而这部分C语言并不是xv6的一部分。

         Makefile的内容再多看一点吧,那就是这一系列的可执行文件的生成规则。其实,从.c到.o的转换是非常简单的。而这里增加了一个依赖处理规则,实现了带有下划线的这部分可执行程序的构建。

         可执行文件可以进入到OS中让OS识别到,其实是打包到了同一个文件镜像中。也就是上面makefile中划出来的这部分所实现的功能。而这里的mkfs其实是一个可执行文件。

         而这个mkfs,其实是通过编译链接生成的。具体的处理规则,也是在makefile中定义出来的。由此,这个处理的方式其实是就需要看C语言中的具体实现了。

         Mkfs.c中,其他的地方可以先不去研究们可以注意到这里这一段代码。代码前面也写了非常有用的注释可以让我们知道,在处理文件到文件系统的时候,这个前面的前缀是被处理掉了的。

         直接通过C语言设计工具在makefile中调用,这不是第一次看到了,另一次是在看FUZIX代码的时候看到的。的确是非常巧妙,也足以让我去好好反思一下,为什么类似的处理在我的工作中就很难联想到。换句话说,如果是我做类似功能的处理,大概率我会想到脚本语言而不是C。看得出来,C的扩展库的掌握,我的确是需要增补一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_283918.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino2.0.4的安装以及上传错误:exit status2

一、安装并下载Arduino 可以进入到下面这个网站中下载会比较快。 Arduino IDE下载(9月15日更新到2.0)-Arduino爱好者 - Powered by Discuz! Arduino IDE下载(9月15日更新到2.0)-Arduino爱好者 - Powered by Discuz!Arduino IDE下…

【基于冗余缩减变换:Pan-Sharpening】

Pan-Sharpening Based on Transformer With Redundancy Reduction (基于冗余缩减变换的全色锐化算法) 基于深度神经网络(DNN)的泛锐化方法已经产生了最先进的结果。然而,在全色(PAN)图像和低空…

Python-Python基本用法(全:含基本语法、用户交互、流程控制、数据类型、函数、面向对象、读写文件、异常、断言等)

1 环境准备 编辑器:Welcome to Python.org 解释器:pycharm:Thank you for downloading PyCharm! (jetbrains.com) 2 Quick start 创建项目 new project create demo print(Dad!!)3 基本语法 3.1 print 直接打印 print(Dad!!)拼接打印…

AD20添加元件3D库

Altium Designer是画PCB常用的工具之一,为了PCB的美观性,我们可以采用3D的方式查看已经画好的PCB板。但在这之前需要准备好每个元器件的3D模型。 1、下载3D格式模型 http://www.3dcontentcentral.cn 当然要先注册账户。 在搜索栏输入你想要找的器件。 模型格式STEP AP214…

vue-cli 初始化工程

个人记录下vue-cli创建项目的步骤 卸载老版本的vue-cli (这不是必要的) npm uninstall vue-cli -g 如果本地使用 yarn的话,还需执行 yarn global remove vue-cli 安装全新的vue-cli npm install -g vue/cli 安装指定版本的vue-cli npm install -g vue/…

linux 安装git并拉取代码教程

#一步一步执行以下命令sudo apt install git #安装gitgit --version #查看安装版本号git config user.name jtr #设置用户名git config user.email jiangtrcloudskysec.com #设置邮箱ssh-keygen -t rsa -C "jiangtrcloudskysec.com" #生成秘钥,一直往下按…

自动化测试框架:DrissionPage(1)——安装与设置

发现了一款基于Python的网页自动化工具:DrissionPage。这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一,简单来说:集合了WEB浏览器自动化的便利性和 requests 的高效率优点。 一、DrissionPage框架产生背…

【C++进阶】01:概述

概述 OVERVIEW概述C11新特性:C14新特性:C17新特性:C20新特性:C程序编译过程C内存模型CSTL1.Queue&Stack2.String3.MapC语言C语言面向过程编程✅✅面向对象编程(类和对象)❌✅泛型编程、元编程&#xff…

数据结构之七大排序

数据结构之七大排序🔆排序的概念及其运用排序的概念常见的排序算法🔆插入排序直接插入排序希尔排序🔆选择排序直接选择排序堆排序🔆交换排序冒泡排序快排🔆归并排序🔆非比较排序🔆结语&#x1f…

十二、Pytorch复现Residual Block

一、Residual Network 论文出处:Deep Residual Learning for Image Recognition 其核心模块: 二、复现Residual Block 这里以两层卷积层为例进行设计复现 resnet可以很好的解决梯度消失问题 Residual Block大致要点: 样本x传入模型&…

下一个“AI王炸”,别只盯着OpenAI,DeepMind也在憋大招

过去几个月,OpenAI风头无两,各大科技公司争先恐后地跟进大语言模型(LLM)这一技术路线。对比之下,OpenAI的老对手DeepMind,显得有些低调和沉默。微软靠OpenAI打了一场胜仗,而谷歌推出的Bard翻了车…

5.5G,运营商能接受吗?

2月份,我在巴塞罗那参加MWC 2023时有个发现。欧洲通信设备商大多在宣传和讨论6G相关技术,中国通信设备商却在重点展示5.5G,或者叫做5G-Advanced。而全球各国的运营商则都普遍处在比较观望的状态里,两头考察,多样化尝试…

中间表示- 到达定义分析

基本概念 定义(def):对变量的赋值 使用(use):对变量值的读取 问题:能把上图中的y替换为3吗?如果能,这称之为“常量传播”优化。 该问题等价于,有哪些对变量y…

OPNET Modeler 例程——创建一个移动无线网络

文章目录一、例程概述二、创建天线模型三、创建指向处理器四、创建节点模型1.发射机节点模型2.干扰发射机节点模型3.收信机节点模型五、创建网络模型六、收集统计量并运行仿真七、查看仿真结果总结一、例程概述 OPNET 无线模块支持地面和卫星无线系统的构建。在此例程中将构建…

【C++】基础篇

C基础篇什么是C命名空间命名空间的三种使用方式C的输入和输出缺省参数缺省参数分类函数重载引用引用的使用场景常引用指针和引用的区别auto关键字auto使用细则auto不能推导的场景基于范围的for循环范围for的使用条件指针空值nullptr什么是C 1982年,Bjarne Stroustr…

微服务+springcloud+springcloud alibaba学习笔记【Eureka服务注册中心】(3/9)

Eureka服务注册中心 3/91、服务注册与发现1.1 什么是服务治理:1.2 什么是服务注册与发现:1.3 Eureka服务注册与发现2、单机版eureka2.1 创建module2.2改pom依赖2.3写yml配置文件:2.4主启动类2.5 修改服务提供者 cloud-provider-payment8001 模块&#xf…

GFS的卷类型与集群实验文档

GlusterFS 支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷。我们常用的有前五种,今天我们就来看一看这五种卷都有什么优缺点。 一、分布式卷(Distribute volume) 文件通过 H…

【模型复现】resnet,使用net.add_module()的方法构建模型。小小的改进大大的影响,何大神思路很奇妙,基础很扎实

从经验来看,网络的深度对模型的性能至关重要,当增加网络层数后,网络可以进行更加复杂的特征模式的提取,所以当模型更深时理论上可以取得更好的结果。但是更深的网络其性能一定会更好吗?实验发现深度网络出现了退化问题…

python玄阶斗技--tkinter事件

在前一篇文章中,我们已经了解是tkinter的一些标签的使用,但一个GUI程序除了让别人看到,还要有一些交互操作,实现人机交互的方法我们称为事件,通过事件分为:鼠标事件,键盘事件和窗口事件。接下来…

Neo4j初学者使用记录(在更)

打开Neo4j cmdR 输入neo4j console 浏览器中输入框中网址:http://localhost:7474/即可打开 新建库 服务器版需要更改配置文件,若neo4j服务正在运行,则按Ctrlc,停止该服务。 配置完后,再重新开启服务,刷新…