草庐IT

自己动手从零写桌面操作系统GrapeOS系列教程——8.x86介绍

成宇佳的技术博客 2023-03-28 原文

由于GrapeOS目前只支持x86,所以本讲我们简单的介绍一下x86。

百度百科上是这样介绍的:x86泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构。

中央处理器就是我们平时说的CPU,英文全称是Central Processing Unit。

有人可能对指令集不是很清楚。计算机的运行过程主要就是CPU执行各种指令的过程,某种CPU能执行的所有指令的集合就叫该种CPU的指令集。但光这么说感觉有点泛泛而谈。其实指令集就是CPU的语言,就像人类的语言,我们可以从横向和纵向分别对比一下。从横向来说,人类的语言有很多种,不同的人群说着不同的语言,但可以用不同的语言来描述同一件事情。同样指令集也不止一种,不同架构的CPU用着不同的指令集。比如x86架构的CPU都用x86的指令集,ARM架构的CPU都用ARM的指令集。但一种指令集架构的CPU能做的事,理论上其它指令集架构的CPU也能做。从纵向来说,人类的语言是在不断发展的,同一种语言会随着社会的发展会不断增加新的词汇或新的用法,但不会丢弃之前的词汇或用法,就算部分旧的词汇和用法不常用了,但仍然可以理解其含义。指令集也是类似的,每一种指令集随着社会的发展,面对新的需求,需要增加一些新的指令或用法,同样一般会兼容旧有的指令或用法,否则很多旧软件就不能用了。

x86之所以叫x86是因为早期的x86系列CPU是用数字命名的,比如8086、80186、80286、80386以及80486,这些名字都是以86结尾,所以统称x86。虽然后来不用数字命名了,改叫奔腾、酷睿等,但仍然继续叫x86系列。
关于x86我们需要简单的了解一下它的历史,这里主要了解下面这三款CPU就够了:

  1. 英特尔于1978年推出型号为8086的CPU,是x86的开山鼻祖。8086是16位CPU,运行模式只有实模式,共1M内存地址空间。
  2. 英特尔于1982年推出型号为80286的CPU。80286是16位CPU,运行模式首次有了保护模式,共16M内存地址空间。
  3. 英特尔于1985年推出型号为80386的CPU。80386是32位CPU,可以运行在32位保护模式下,共4G内存地址空间。

以上3款CPU大家先有个印象就行,详细信息我们后面会介绍。我们这里需要明白的主要有两点:

  1. x86系列CPU中,每一代都兼容前面的所有CPU,直到现在最新的x86CPU仍然兼容四十多年前的8086。
  2. 虽然x86是英特尔首先发明的,但做x86CPU的企业不止英特尔一家,市场上常见的还有AMD。所以如果你的电脑用的是AMD的CPU,学习本套教程完全没有问题。

本讲对应的视频版地址:https://www.bilibili.com/video/BV1MM4y1Q7A1/
GrapeOS操作系统交流QQ群:643474045

有关自己动手从零写桌面操作系统GrapeOS系列教程——8.x86介绍的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  3. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  4. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  5. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  6. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  7. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  8. ruby-on-rails - 如何测试自己对 Ruby/ROR 的了解? - 2

    是否有self验证的问题列表。看着那个,我可以确定我知道。我应该复习一下。在学习的过程中,我列了一个这样的list,但它只包含我在某处听说过的项目。我需要一段时间才能找到新的东西。 最佳答案 以下是针对ruby​​和Rails的一些测试列表。证书名称:RubyonRails谁提供:oDeskIncorporation认证费用:免费网站:https://www.odesk.com/tests/985?pos=0证书名称:RubyonRails提供者:Techgig.com(TimesBusinessSolutionsLimited(T

  9. ruby-on-rails -/usr/local/lib/libz.1.dylib,文件是为 i386 构建的,它不是被链接的体系结构 (x86_64) - 2

    在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto

  10. ruby - libxml-ruby 无法在 x86_64 上加载 - 2

    我们在服务器端遇到libxml-rubygem的问题可能是因为它使用x86_64架构:$uname-aLinuxip-10-228-171-642.6.21.7-2.fc8xen-ec2-v1.0#1SMPTueSep110:25:30EDT2009x86_64GNU/Linuxrequire'libxml'LoadError:/usr/local/ruby-enterprise/lib/ruby/gems/1.8/gems/libxml-ruby-1.1.4/lib/libxml_ruby.so:invalidELFheader-/usr/local/ruby-enterprise/

随机推荐