操作系统入门系列-MIT6.828(操作系统工程)学习笔记(四)---- C语言与计算机架构(Programming xv6 in C)

系列文章目录

操作系统入门系列-MIT6.S081(操作系统)学习笔记(一)---- 操作系统介绍与接口示例
操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建(wsl2+ubuntu+quem+xv6)
操作系统入门系列-MIT6.828(操作系统工程)学习笔记(三)---- xv6初探与实验一(Lab: Xv6 and Unix utilities)
操作系统入门系列-MIT6.828(操作系统工程)学习笔记(四)---- C语言与计算机架构(Programming xv6 in C)


文章目录

  • 系列文章目录
  • 前言
  • 一、计算机中存储模型的软件抽象
    • 1.硬件层次
    • 2.操作系统层次
    • 3.编译器层次
  • 二、C语言
    • 1.为什么使用C语言编写操作系统
    • 2.使用C语言容易犯的内存错误
    • 3.如何学习C语言


前言

本节对应的是MIT 6.828课程第二节:Programming xv6 in C
PPT的链接如下:Programming xv6 in C
本文沿着PPT的思路,主要讲解了学习操作系统,所涉及到的计算机底层架构与C语言的相关知识,知识的细节并未涉及,仅仅是在表面提出一些宏观的描述,具体知识细节需要专门学习相关课程。


一、计算机中存储模型的软件抽象

文章中将存储模型的分层结构进行了如下软件抽象:
在这里插入图片描述

1.底层是由存储芯片与IO设备组成的物理存储结构,是硬件
2.之后将这些硬件,通过软件抽象统一到一个地址空间中,方便寻址(其中IO设备可能与存储芯片被分别统一到两个地址空间)
3.之后在统一连续的地址空间上划分相应的区域,也就是“段”。其中最核心的涉及就是栈和堆
4.在这些基础上,就有了各种各样的编程语言,更高级的编程语言有了垃圾回收、ARC、智能指针等机制

1.硬件层次

CPU与硬件开发板上的诸多外设交互的载体便是总线,下图均描述总线结构。
在这里插入图片描述
在这里插入图片描述
需要注意的是,总线并不是简单的一根线或者是几根线,它更多的是一种协议。协议中包含了数据、控制信号、权限等,类似于TCP/IP协议,根据这些内容,总线上的CPU、IO设备、内存,就可以实现有序的数据交互:
具体的知识可以参考博客:
揭秘计算机内部通信:探秘数据、地址与控制信号的奥秘
cpu 是如何工作的

2.操作系统层次

从操作系统的角度看待计算机中的存储模块,那便是一整块的存储空间(IO与内存统一寻址情况)。那么操作系统如何能够拥有这样的“视角”,可以忽略复杂的总线通信和多种多样的外围设备,原因是CPU内部的机制实现了该层抽象。
细节的知识可以参考博客:
CPU 地址空间分配原理分析

在这里插入图片描述
CPU可以通过简单的汇编指令读写地址空间的单元,每个单元是8 bits。
有下面几点需要注意:

1.由于考虑到可以通过增加或者减少RAM芯片来增加或者减少实际内存。所以CPU提前抽象出了足够大的地址空间,以便于之后的扩充
2.可以映射到硬件的地址可以被访问;不能映射到硬件的地址无法被访问
3.地址单元有三种权限:读(W)、写(W)、执行(X),这样不管是代码还是数据,都可以统一的存储到存储空间

之后的课程会深入了解该层次,并且讨论page(页)与cache的连续性问题

3.编译器层次

该层次个人理解就是C语言与汇编语言的层次,也可以是编译器的层次。将内存空间分为了多个区域,如下图:
在这里插入图片描述
其中,heap是堆空间,用来存放动态分配的内存,如malloc函数分配的内存;stack是栈空间,函数调用后就会进入栈空间,里面存放着属于该函数的局部变量;data是存放全局数据;text是存放代码。

其中栈空间的运行方式可以简单如下图:

在这里插入图片描述

二、C语言

C语言具体的语法内容就不在此处赘述,相信各位读者也已经很好的掌握。需要注意的有关C语言的知识点是Undefined behavior。可以参考文章:
C 未定义行为(Undefined behavior)

1.为什么使用C语言编写操作系统

(1)适用于底层编程

1.可以直接操作地址空间,相比于一些语言将地址空间的操作进行了抽象和封装
2.可以轻松地访问各种各样的硬件设备,因为众多硬件设备都对C语言有很好的支持

(2)内核完全控制内存分配

1.可以使用 C 语言直接构建内存分配器
2.没有垃圾回收机制

(3)执行效率高

1.是编译语言,不是解释性语言,不需要解释器,直接以机器指令执行。

2.使用C语言容易犯的内存错误

1.在free(释放)存储空间后使用它
2.重复释放一个存储空间
3.在使用内存时忘记初始化(申请的内存中并不一定是0)
4.对数组空间之外的元素操作(缓存溢出)
5.忘记释放动态分配的内存(内存泄漏)
6.强制转换一个对象到错误的变量类型
7.忘记检查动态分配的内存是否成功
8.使用指向堆栈上位置的指针

3.如何学习C语言

可以参考博客,该博客是美国大学一个教授讲该如何教学生C语言,我们可以从老师的角度来进行C语言的学习,更加的有效
Teaching C
缺点是该博客是英文版,可能后续会进行翻译。


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

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

相关文章

linux系统——route路由命令

route路由对linux内的ip路由表进行操作 计算机间的数据通信是通过网络来实现的,路由就是从源主机到目标主机的转发过程 路由分为静态路由与动态路由,linux中的均为静态路由,动态路由由交换机路由器自动分配规则而来

[word] word悬挂缩进怎么设置? #经验分享#职场发展#经验分享

word悬挂缩进怎么设置? 在编辑Word的时候上方会有个Word标尺,相信很多伙伴都没使用过。其实它隐藏着很多好用的功能,今天就给大家分享下利用这个word标尺的悬挂缩进怎么设置,一起来看看吧! 1、悬挂缩进 选中全文&…

Linux Mint 默认禁用未经验证的 Flatpak 软件包

Linux Mint 默认禁用未经验证的 Flatpak 软件包 Linux Mint 新政策 Linux Mint 项目宣布了一项新政策,即默认禁用那些未经官方验证的 Flatpak 软件包,以增强用户的安全保障。 当用户选择启用未经验证的 Flatpak 软件包时,Linux Mint 的软…

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发 1990年11月,美国先进制造研究中心AMR(Advanced Manufacturing Research)就提出了MES&#…

Linux守护进程揭秘-无声无息运行在后台

在Linux系统中,有一些特殊的进程悄无声息地运行在后台,如同坚实的基石支撑着整个系统的运转。它们就是众所周知的守护进程(Daemon)。本文将为你揭开守护进程的神秘面纱,探讨它们的本质特征、创建过程,以及如何重定向它们的输入输出…

国产主流软硬件厂商生态分析

国产领域主流厂商汇总 信创,即信息技术应用创新,由“信息技术应用创新工作委员会”于2016年3月4日发起,是专注于软硬件关键技术研发、应用与服务的非营利性组织。作为科技自强的关键力量,信创在我国信息化建设中占据核心地位&…

外部mysql导入

利用这个命令&#xff1a; mysql -u username -p database_name < file.sql 然后就这样。成功导入。

定个小目标之每天刷LeetCode热题(12)

这是一道简单题&#xff0c;使用位运算中的异或运算即可&#xff0c;异或运算有以下性质&#xff1a; 1、任何数异或 0 结果仍然是原来的数&#xff0c;即 a⊕0a 2、任何数和其自身做异或运算&#xff0c;结果是 0 所以我们只需要让数组里的所有元素进行异或运算得到的结果就…

探索风电机组:关键软件工具全解析

探索风电机组&#xff1a;关键软件工具全解析 随着可再生能源市场的迅猛发展&#xff0c;风电作为一种重要的可再生能源&#xff0c;其相关技术和工具也越来越受到重视。风电机组的设计、仿真、优化及运维等方面&#xff0c;都需要依靠一系列专业软件工具来实现。这些软件涵盖…

Netty中的ByteBuf使用介绍

ByteBuf有三类&#xff1a; 堆缓存区&#xff1a;JVM堆内存分配直接缓冲区&#xff1a;有计算机内存分配&#xff0c;JVM只是保留分配内存的地址信息&#xff0c;相对于堆内存方式较为昂贵&#xff1b;复合缓冲区&#xff1a;复合缓冲区CompositeByteBuf&#xff0c;它为多个B…

VS2019创建c++动态链接库dll与调用方法

VS2019创建c动态链接库dll与调用方法 1.点击文件-》新建-》项目&#xff0c;输入dll,选择具有导出项的(DLL)动态链接库 2.输入一个文件名&#xff1a;dll2 头文件.h 3.添加加减法函数&#xff1a; // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的…

题解web

1.[LitCTF 2023]Follow me and hack me 1&#xff09;进入题目环境&#xff0c;提示get传参&#xff0c;post传参 2&#xff09;看看源码&#xff0c;也没啥 3&#xff09;直接用hackbar&#xff0c;传入对应参数即可得到FLAG 3&#xff09;但是扫描出来它后端还有东西&#x…

Vue 学习笔记 总结

Vue.js 教程 | 菜鸟教程 (runoob.com) 放一下课上的内容 Vue练习 1、练习要求和实验2的用户注册一样&#xff0c;当用户输入后&#xff0c;能在下方显示用户输入的各项内容&#xff08;不需要实现【重置】按钮&#xff09; 2、实验报告中的实验小结部分来谈谈用JS、jQuery和…

618数码产品有什么推荐?四大2024“宝藏”数码产品推荐!

随着618购物节的热情逐渐升温&#xff0c;你是否在繁多且诱人的商品海洋中迷失方向&#xff0c;难以找到那最心仪的宝贝&#xff1f;团团在此特别为你精心挑选了一系列经过亲身体验的优质好物。这些推荐不仅时尚前沿&#xff0c;更贴合你的日常生活需求&#xff0c;确保实用与品…

霸气的短视频:成都科成博通文化传媒公司

霸气的短视频&#xff1a;瞬间的力量与魅力 在数字化浪潮中&#xff0c;短视频以其独特的魅力迅速崛起&#xff0c;成为社交媒体的新宠。而在众多短视频中&#xff0c;那些充满霸气、让人热血沸腾的作品&#xff0c;总能引起广泛的关注和讨论。成都科成博通文化传媒公司将从内…

CSS基础知识汇总

目录 CSS 基础知识1. CSS 的基本结构2. 选择器3. 常用 CSS 属性4. CSS 单位5. CSS 盒模型 总结 学习 CSS&#xff08;Cascading Style Sheets&#xff09;是前端开发的重要部分&#xff0c;它用于控制网页的样式和布局。以下是学习 CSS 过程中需要掌握的基本概念、符号和对应的…

Vue08-数据代理

一、Object.defineProperty() Object.defineProperty() 是 JavaScript 中的一个方法&#xff0c;用于直接在一个对象上定义一个新属性&#xff0c;或者修改一个对象的现有属性&#xff0c;并返回这个对象。 这个方法允许你精确地控制一个对象的属性&#xff0c;包括它的值、是…

数据库存储过程和锁机制

存储过程 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的&#xff0c;存储过程思想上很简单,就是数据库SQL语言层面的代码封装与有重用 …

Flutter开发效率提升1000%,Flutter Quick教程之对Widget进行删除,剪切,粘贴

一&#xff0c;删除操作 1&#xff0c;首先我们选中要删除的Widget。 2&#xff0c;在左边的侧边栏&#xff0c;点击删除按钮&#xff0c;即可完成对组件的删除操作。 二&#xff0c;剪切。剪切是相同的道理&#xff0c;都是先选中&#xff0c;再点击对应的按钮。 1&#xff…

javaWeb4 Maven

Maven-管理和构建java项目的工具 基于POM的概念 1.依赖管理&#xff1a;管理项目依赖的jar包 &#xff0c;避免版本冲突 2.统一项目结构&#xff1a;比如统一eclipse IDEA等开发工具 3.项目构建&#xff1a;标准跨平台的自动化项目构建方式。有标准构建流程&#xff0c;能快速…