热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

系统启动理解兴趣篇

电脑是如何启动的?为什么电脑断电后系统时间任然在走,短时间内启动电脑后系统时间不会发生偏差?远程开机是如何实现的?为什么电脑

        电脑是如何启动的?为什么电脑断电后系统时间任然在走,短时间内启动电脑后系统时间不会发生偏差?远程开机是如何实现的?为什么电脑操作系统比手机占用更多的内存?为什么电脑没有采用运算速度更快的哈佛结构,一如既往的采用冯诺依曼机构?……最近接触到一些嵌入式linix系统中的裸机程序,对它的执行过程引发了许多思考。

       对于BIOS大家都不陌生,最常用的功能是在装系统时配置启动项,是从U盘启动还是硬盘启动还是其他。其实BIOS功能远不止这些,它包含着系统的基本信息设定,上电自检,系统启动项等内容,一个有意思的设定是它可以改变电脑开机的方式,如按键盘任意键开机,鼠标点击开机,定时自启等,如果主板与网卡支持,还可以设计远程开机。

       难以想象,未来的家用电器如果配置了远程网络功能,可以实现开关机的话,下班乘公交车的时候用手机打开家里的电饭锅,回到家就可以直接享受刚出锅的晚餐了。

了解了BIOS就能够对电脑从按下电源键开始到桌面化系统启动这段时间都发生了什么,下面从嵌入式系统的boot loader 工作过程简单理解一个处理器是如何启动的(它与BIOS的工作原理惊人的相似)。

简介


了解这些首先要理解一些相关概念。一个系统的组成包括软件系统和硬件系统。




                          


         为什么嵌入式采用的Linix操作系统要比PC机采用的Windows操作系统在内存上小出那么多?其实,无论是哪一个系统都是由内核与接口程序,驱动程序(驱动硬件操作),它是操作系统的基础。像现在的手机操作系统都是通过改编开放的Linix系统内核加上必要的接口程序驱动程序得到的。嵌入式所要求的操作系统功能并不是非常全面,它往往是针对某一个具体的功能而设计的,则系统并不需要加入所有的驱动程序,以够用为原则。而Windows操作系统为适应不同的CPU,主板等不同硬件的需要,而且要实现多功能操作,势必引入的接口,驱动程序要多出很多了。

       Boot loader与BIOS的功能相似,是一段占用4k的启动代码,它最初存在于Norflash中(就像电脑硬盘)。

       Norflash与Nandflash都是一种存储介质,Norflash比Nandflash存储容量小,访问速度快。

       哈佛结构与冯诺依曼结构对比,冯诺依曼结构只有在上一条指令执行完成后才能执行下一条,依次顺序执行,哈佛结构在执行第一条指令的译码工作时,第二条指令就可以同步执行取指令操作了。电脑采用但由于电脑的晶振比手机大的多,所以并没有感觉电脑比手机慢。

                                         

                       

工作

      在2410中存在一块SRAM(相当于CPU中存在一块4k内存,存放执行数据),boot loader从Nandflash中读出boot loader到SDRAM中,然后送回到2410处理器中处理数据(因为内存中的SRAM只有4k相当小,如果是小程序直接烧写到这里可直接执行)。

    

        Bootloader中含有一组启动的代码init.s(用汇编编写为.s文件,但往往启动代码是由汇编与c语言混合编写的)它的具体流程如下:

 

1.      关闭看门狗。程序一旦开始执行,看门狗定时器就开始计时,如果一个程序一段时间后不给定时器一个信号的话,看门狗数据溢出,自动复位。

2.      中断是硬件执行的基本操作。程序执行过程中收到外来打扰就会响应中断执行外部程序。

3.      时钟为所有的工作提供一个统一的信号,就像运动员在喊口令一样,保持协调一致,只有这样才不会造成各个程序之间的混乱

4.      RAM存储器在断电后都会清空

5.      波特率是串口的传输速率,电脑主机接显示屏的线就是一个串口线。校验位负责检验是否系统启动是否出错,寄存器负责记录当前工作状态的地址,暂存待处理数据等功能。

6.      设置堆栈指针,指针主要应对c程序。比方说程序在开始启动时执行汇编指令,突然接到中断后转到其他地址去执行指令,此时的地址要保存到堆栈中保护起来,等到中断执行完毕,又返回来执行现有程序,必须要从堆栈中获取当前地址。

总结

        对比软件编程与驱动硬件的编程,其语法结构都是一样的,无外乎顺序,选择,循环结构。但基于硬件的编程必须要考虑到硬件寄存器端口地址,每个处理器中的寄存器地址都代表着不同的地址,造成程序编写过程中必须要查表才能对实现具体的操作。而软件中的每一个控件都是由自己命名的,大大简化了操作过程。
       对机器执行程序的理解:最初的计算机语言都是机器语言,用到的都是0和1,难以记忆。后逐渐发展的汇编,高级语言被大众所接受,经过专门的编译器编译生成二进制文件。在执行过程中调入内存中,每一个内存单元都有一个特定的地址。CPU通过寻址的方式发现这些被编译的0和1被电脑所识别,执行。
       就好比驱动程序,如果不是专门的驱动程序师编译出来的驱动往往都是不稳定的。只有清晰的理解了内部架构才能编写出出色的硬件程序,这应该就是硬件编程困难的原因吧。
(如有错误,还望大神前来扶正)


推荐阅读
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Windows 系统下 MySQL 8.0.11 的安装与配置
    本文详细介绍了在 Windows 操作系统中安装和配置 MySQL 8.0.11 的步骤,包括环境准备、安装过程以及后续配置,帮助用户顺利完成数据库的部署。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 技术人员转型项目管理:常见思维误区与挑战解析
    本文探讨了技术人员在向项目管理角色转变过程中常见的思维误区和困惑,分析了如何有效管理项目中的事务和人员,提供了实用的解决方案。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 配置Windows操作系统以确保DAW(数字音频工作站)硬件和软件的高效运行可能是一个复杂且令人沮丧的过程。本文提供了一系列专业建议,帮助你优化Windows系统,确保录音和音频处理的流畅性。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
author-avatar
28划生12_928
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有