操作系统的自我修养-02-玩你妹的“BIOS”

跟着团子学SAP CO:熟练使用结果分析码实现各个场景下收入成本的匹配(一) KKA2/CJ88 PS模块中对财务顾问最难的点在于项目结算,特别是销售型的项目结算。针对客户型项目结算我列举了以下常见的收入成本匹配的一些场景: (1)在项目执行过程中会多次开票,但由于各期成本浮动很大(如前期可能只涉及一些人工、中期全是比较金额较大的材料费),所以希望开票的时候能通过合理的一些指标进行主营业务成本与主营业务收入的匹配。 (2)项目过程中会多次开票,开票确认主营业务收入时,直接将累计发生的实际成本结转为主营业务成本。 (3)项目过程中虽多次开票,但不确认收入,所有发生的实际成本月末计算为在制品,最后项目一次性 阅读详情

  作者:K_Linux_Man    转载请注明出处

   结合已经搭建好的环境,知道明白BIOS的机理,利用BIOS中断,制作出你的第一个系统img镜像出来。

你可以欣喜若狂,因为,每一次的欣喜若狂总是推动你更进一步。言归正传.....我的妹妹,喜欢玩BIOS,

这么好的东西,我怎么肯能让她自己一个人寂寞孤单的玩呢!嘿嘿。偷偷的趁她不注意,抢来玩妹子的BIOS。

不过,玩你妹的BIOS之前,一定得搞懂BIOS呦,要不然,玩火自焚就不好收拾了!

BIOS的简单介绍

       BIOS是英文"Basic Input Output System"的缩略语。看定义就知道是基本输入输出的意思。BIOS芯片嵌在电脑主板上,保存在

主板上的一块EPROM或EEPROM芯片中,只读格式。它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和

系统自启动程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。BIOS是连接软件程序与硬件设备的一座"桥梁",

负责解决硬件的及时要求。

     BIOS包括有系统BIOS(即常说的主板BIOS)、显卡BIOS和其它设备(例如IDE控制器、SCSI卡或网卡等)的BIOS,其中系统BIOS是我们

将要讨论的主角。

 

Computer(Intel X86体系)  -----BIOS启动顺序

     1.当电源一通电,整个计算机包括RAM在内的几乎所有部件,都处于一种随机的混乱状态.这时CPU的Reset的管脚拉低,CPU重置,

促使CPU将自己的主要寄存器(包括cs和eip)设置为启动状态──实际上就是把这些cpu内的寄存器内容设置成一些预定值。

 

     2.我们都知道指令寄存器(eip)决定cpu下一步要执行什么,所以指令寄存器都被预置成一个固定值(寄存器cs=0xFFFFFFF, IP=0000),

那么该固定位置上的指令就会被执行——intel x86系统的eip都指向了地址0xFFFFFFF0上的指令,所以该指令便作为系统加电后执行第一条指令了。

 

    3.硬件系统会把BIOS只读芯片的存储区地址映射到这两个位置上(0xFFFFFFF0-0xFFFFFFFF)和(0xFFFF0-0xFFFFF),也就是说cpu要

访问这两段地址,都会去访问同一个BIOS ROM。这就是所谓的BIOS地址映射(具体的原理是比较复杂的,在此不是咱们研究的重点) 

所以ROM中存放的程序就会被调用执行——换句话说就是机器加电后首先执行ROM中存放的程序,该程序被称为BIOS(Basic Input/Output System)

。当然这个ROM也就被人们叫为 “系统BIOS芯片”(或主板BIOS芯片)。

 

    4.无论是Award BIOS还是AMI BIOS(两种主流BIOS厂商)放在这里的只是一条跳转指令,跳到各自厂家的BIOS程序中POST加电自检程序地址。

 

    5.首先BIOS里的自检程序开始运行,进行POST上电自检(Power On Self Test),检测系统中一些关键设备是否存在和能否正常工作,

例如内存(只检测了64k大小的基本内存)和显卡等设备。由于POST是最早进行的检测过程,此时显卡还没有初始化,如果系统BIOS在进行

POST的过程中发现了一些致命错误,例如没有找到内存或者内存有问题,那么系统BIOS就会直接控制喇叭发声来报告错误,声音的长短和次数

代表了错误的类型。在正常情况下,POST过程进行得非常快,我们几乎无法感觉到它的存在,POST结束之后就会调用其它代码来进行更完整

的硬件检测。

 

    6.BIOS接下来要进行显卡的检测并初始化。显卡BIOS也有其固定的地址,其地址存放在0xC00000000处,在这个地址运行检测和初始化

显卡代码。初始化显卡的时候,通常显示显卡的图标以及生产厂商等信息,只不过是一闪而过,我们几乎肉眼看不到。

 

    7.返回到系统BIOS(主板BIOS)代码处,继续依次执行其他BIOS检测代码,至此忽略。

 

    8.执行完所有检测代码之后,BIOS显示出自己生产厂商的图片、名称、BIOS程序版本号以及生产日期。紧接着显示检测到的CPU信息,

并测试所有的RAM(内存),你插了多大的内存条,就开始检测了。当然这个速度是很快的,在屏幕上显示测试的进度。马上你就能看到,

你的内存容量是多少以及“OK”的字样。这说明内存检测完毕,一切OK!

 

    9.内存检测完成之后,就开始检测电脑标准IO设备。IO设备包括,硬盘、CD-ROM、FLoppy(软驱)、USB设备、串口、并口等等,

并显示出这些信息来。接着,系统BIOS程序将即插即用设备(主要是usb设备)进行初始化,分配端口号以及中断号等资源,使其可以使用。

一般显示“Initializing Usb Controller.....Done”。并紧随其后显示电脑启动顺序(启动顺序是从CMOS里读取出来的),“Master HardDisk......First....Second.....”(嘿嘿,此处省略一万行!赵本山笑话)。假如硬盘出现问题,会有类似“hard disk status bad”等

信息提示。

 

    10.至此所有硬件设备都已经初始化并配置完毕。同时,系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些信息将存储到CMOS中,CMOS是一块非常特殊的RAM芯片,以主板上的

CMOS纽扣电池为其供电。好不容易BIOS检测并配置完的信息就要这样付诸东流了吗? 不是的,CMOS是为以后系统调取硬件信息和配置信息打下伏笔。这里必须强调一下,CMOS与BIOS是两个完全不同的概念,CMOS是存储BIOS检测和配置信息的地方,而BIOS是基本输入输出程序,是程序!

 

    11.CMOS里面的内容是可以去修改的。BIOS提供图形界面程序,并以一个键盘按键(通常是“del”)来设置CMOS里面的内容。CMOS里面

存放着好多内容,常见的比如,系统时间、启动顺序、硬盘接口等等。知道了吗?这就是人们经常把BIOS与CMOS混为一谈的原因,修改时

CMOS的内容,提供画面配置的是BIOS。之后多数BIOS厂商都会清屏,以表格的形式显示BIOS检测并配置的信息,其中概略地列出了系统中

安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。

 

    12.系统BIOS的使命还没有结束,它需要从内存 0x00000000地址处开始--至0x000003FFF 初始化中断向量表。通过调用中断来对硬件进行操作。

 

    13.读取启动设备信息,以启动设备号为参数调用系统BIOS启动装载程序(我们也可以称为“字节搬移程序”或自举程序,更便于理解)。

这个装载程序通过BIOS的0x19中断,从启动设备(硬盘或者软盘)的第0个扇区(一个扇区为512字节),读取这512字节内容,将其装载到

内存物理地址0x7C00处。这512字节的内容,常常被人们称为Boot Sector(启动扇区或引导扇区)。为什么偏偏是这个0x7c00地址呢?  

稍后解释一下。

    14.BIOS在此还要做一项很重要的工作。“BIOS兄弟”不知道从启动设备上读取的这段512字节的内容是不是专门用来加载操作系统

内核任务的,换句话说,不能确定512字节内容的合法性。BIOS规定这512字节的内容中,最后的第511和第512字节字节内容分别为0x55和0xAA。

如果是以0x55和0xAA结束的512字节内容,都被视为合法的引导扇区程序,否则,提示引导扇区失败。合法性验证通过之后,cpu指向0x7c00处的指令,开始执行那里的代码。我们第一行代码就要从0x7c00那里编写。

 

  15.之后,引导扇区加载操作系统内核,初始化环境等等。

 

引导程序为何从0x7c00处开始?

英文原文及翻译  

"0x7C00" is the memory address which BIOS loads MBR(Master Boot Record, a first sector in hdd/fdd) into. OS or bootloader developer must assume that their assembler codes are loaded and start from 0x7C00.(0x7c00 是BIOS加载MBR的内存地址,操作系统

或者引导程序开发者必须确保你的汇编代码从0x7c00开始加载)


"I read all of Intel x86(32bit) programmers manual, but did not found the magic number 0x7C00." 
Yes.0x7C00 is NOT related to x86 CPU. It's natural that you couldn't find out it in cpu specifications from intel. 

Then, you wonder, "Who decided it ?" (我读了所有的x86编程手册,没有发现0x7c00这个地址。是的,0x7c00与x86 cpu没有关系,自然你不能

从intel的手册中查到。)


you may wonder: 
"0x7C00 is 32KiB - 1024B at decimal number. What's this number means ?" (你可能疑惑,0x7c00这个地址,正好是32K-1024B,它意味什么?
)

Anyone decided it. But, why he/she decided such a halfway address?(任何人可以决定地址。但为什么选了一个地址不算高也不低的地址呢?)


Hum...There're TWO questions(mysteries) arround the magic number "0x7C00". 
Who decided "0x7C00" ?
What "0x7C00 = 32KiB - 1024B" means ?

(围绕这两个问题,谁决定的0x7c00地址?为什么0x7c00恰好是32Kb-1024B?)


Okay, let's dive into the secret of BIOS for "IBM PC 5150", ancestor of modern x86(32bit) PCs, with me...!! 

(让我解开IBM PC 5150的BIOS神秘面纱, IBM PC 5150 是现在x86的原始模型)


0x7C00" First appeared in IBM PC 5150 ROM BIOS INT 19h handler.

(0x7c00 第一次出现在IBM PC 5150 ROM BIOS 的第19号中断程序里)


Wandering arround the history of x86 IBM Compatible PC, you know IBM PC 5150 is the ancestor of modern x86(32bit) 

IBM PC/AT Compatible PCs.(遵循IBM x86 PC机的历史,你可以知道IBM PC5150 是现在x86(32位)机的始祖)


This PC was released at 1981 August, with Intel 8088(16bit) and 16KiB RAM(for minimum memory model). 

BIOS and Microsoft BASIC was stored in ROM. (这种PC发布于1981年8月,cpu用英特尔8088(16位)和16KiB的RAM(最小内存模型)。

 BIOS和微软BASIC是存储在ROM中。)


When power on, BIOS processes "POST"(Power On Self Test) procedure, and after, call INT 19h. 
In INT 19h handler, BIOS checks that PC has any of floppy/hard/fixed diskette or not have. 
If PC has any of available diskkete, BIOS loads a first sector(512B) of diskette into 0x7C00.

(POST上电自检之后,调用19号中断,在19号中断中,BIOS 检查PC机的软盘、硬盘或磁盘是否存在,如果可用,

讲加载第一个扇区(512字节)到0x7c00地址)


Now, you understand why you couldn't find out this magic number in x86 documents. This magic number belongs to 

BIOS specification. (你现在明白了为什么在x86的文档中找不到这个神奇的数字了吧,这个数字是属于BIOS的规格范围内的)


Stories surrounding IBM PC DOS, Microsoft, and SCP's 86-DOS are famous stories.

(故事围绕IBM PC DOS系统和SCP的 86-DOS系统展开的)


SCP's "86-DOS"(at 1980) is the reference OS for IBM PC DOS 1.0.

(86-DOS 参照IBM PC DOS1.0系统) 


86-DOS(early called "QDOS") is CP/M compatible OS for 8086/8088 cpu. At 1979, Digital Research Inc didn't have developed CP/M for 8086/8088 cpu yet. (86-DOS 兼容8086/8088 CPU,但在1979年,数字研究厂商还没为8086/8088 CPU 作出兼容)

SCP sold two S-100 bus board, one is 8086 CPU board, two is "CPU Monitor" rom board.

(SCP 卖两块板子,一块是8086 cpu板,另一个是 CPU 监测板) 


"CPU Monitor" program provided bootloader and debugger. This "CPU Monitor" bootloader loaded MBR into "0x200",

 NOT "0x7C00". In 1981, IBM PC DOS was the NEXT CP/M like OS for 8086/8088.(cpu监测板提供了bootloader和debugger,

cpu监测板的bootloader加载MBR到0x200地址,而不是0x7c00地址。)


 So, I told you that "0x7C00 FIRST appeared in IBM PC 5150 ROM BIOS". 
Previous one, SCP's CPU Monitor bootloader loads into 0x200, not 0x7C00.

(所以我告诉你,0x7c00第一次出现是在IBM PC 5150 ROM BIOS中) 


Why that CPU Monitor's bootloader loeded MBR into "0x200" ?
There're THREE reasons about "0x200". 
8086 Interrupts Vector use 0x0 - 0x3FF.
86-DOS was loaded from 0x400.
86-DOS didn't use interrupts vectors between 0x200 - 0x3FF.
These reasons mean 0x200 - 0x3FF needed to be reserved and couldn't be in the way of an OS, no matter where 86-DOS or user application wanted to load. 
So Tim Paterson (86-DOS developer) chose 0x200 for MBR load address. 

(为什么CPU 监测板中的Bootloader 加载MBR 到0x200地址呢?有三个原因,8086cpu中断使用0x0-0x3FF地址段中,

86-DOS系统将被加载到0x400地址处,86-DOS 不使用0x200-0x3FF之间的中断向量。这些原因意味着0x200-0x3FF之间的地址必须被保留,

操作系统或应用程序都加载不到这里,所以Tim就选择从0x200加载512字节的引导程序了。)


Q:Who decided "0x7C00" ? - A: IBM PC 5150 BIOS Developer Team.
"0x7C00" was decided by IBM PC 5150 BIOS developer team (Dr. David Bradley). 
As mentioned above, this magic number was born at 1981 and "IBM PC/AT Compat" PC/BIOS vendors did not change this value for BIOS and OS's backward compatibility. 
Not Intel(8086/8088 vendor) nor Microsoft(OS vendor) decided it. 

(谁决定0x7c00,IBM PC 5150 开发团队决定的。综上所述,这个神奇的数字诞生于1981, 并且IBM PC/BIOS 供应商没有改变这个值,为了以后的操作系统的兼容,并不是intel或者是微软决定的)


Q:What "0x7C00 = 32KiB - 1024B" means ? A: Affected by OS requirements and CPU memory layout.
IBM PC 5150 minimum memory model had only 16KiB RAM. So, you may have a question. 
"Could minimum memory model (16KiB) load OS from diskette ? BIOS loads MBR into 32KiB - 1024B address, but physical RAM is not enough..." 
No, that case was out of consideration. One of IBM PC 5150 ROM BIOS Developer Team Members, Dr. David Bradley says: 
"DOS 1.0 required a minimum of 32KB, so we weren't concerned about attempting a boot in 16KB." 
(Note: DOS 1.0 required 16KiB minimum ? or 32KiB ? I couldn't find out which correct. But, at least, in 1981's early BIOS development, they supposed that 32KiB is DOS minimum requirements.) 

(为什么0x7c00=32K-1024B? 由于操作系统的需要和CPU的内存分配。 IBM PC 5150 最小内存模块要求仅仅是16K的RAM.所以你可能会有一个问题。 “最小内存16K的RAM可以加载操作系统吗? BIOS 加载MBR 到32K-1024B的位置,但是物理RAM没有那么大的空间呀?! “不,这样你考虑的太多” IBM 5150 BIOS开发团队成员说。

DOS1.0 最少需要32KB的内存,所以我们更没有必要去关心在16KB处的启动问题了。记:DOS1.0到底最小需要16KB还是32KB,我至今也没有找到相关资料。但是,至少在

1981年的早起BIOS开发中就已经假设DOS使用32KB内存容量)


BIOS developer team decided 0x7C00 because: 
They wanted to leave as much room as possible for the OS to load itself within the 32KiB.
8086/8088 used 0x0 - 0x3FF for interrupts vector, and BIOS data area was after it.
The boot sector was 512 bytes, and stack/data area for boot program needed more 512 bytes.
So, 0x7C00, the last 1024B of 32KiB was chosen.

Once OS loaded and started, boot sector is never used until power reset. So, OS and application can use the last 1024B of 32KiB freely. 

After OS loaded, memory layout will be: 

(BIOS 开发团队决定使用0x7c00这个地址是因为: 

他们想留出尽可能多的空间给操作系统去加载在32KB的空间范围内。

8086/8088 使用0x-0x3FF地址范围构建中断向量表,紧接着后面是BIOS的数据区域。

启动扇区是512字节,对于引导程序的堆栈数据区域需要512字节还多。所以,0x7C00地址被决定使用

一旦操作系统加载,引导扇区不会再被使用,直到电源复位,所以,操作系统和应用程序可以使用32KB-1024B的这段空闲区域。)


+--------------------- 0x0
| Interrupts vectors
+--------------------- 0x400
| BIOS data area
+--------------------- 0x5??
| OS load area
+--------------------- 0x7C00
| Boot sector
+--------------------- 0x7E00
| Boot data/stack
+--------------------- 0x7FFF
| (not used)
+--------------------- (...)

小结


BIOS系统是一门非常深的学问,核心技术还是掌握在几家大公司手中,大体流程已经介绍了。对于深究BIOS的人来说,有的地方讲的很模糊。

但是,对于我们要编写操作系统的人来说,我们只需要知道我们编写的第一行代码要从0x7c00处执行,并且第一个扇区以55AA结尾就可以了。+

我们以后要写引导扇区程序,那时候我们将要告诉汇编编译器,我们这段代码要从0x7c00地址处运行。所以,到时候你可要知道这个地址的意义所在。


Ubuntu系统下MRIcroN、FSL6.0.5、Freesurfer7.1.1、ANTs、MRtrix3、AFNI的安装详解——核磁共振数据处理必备 Ubuntu系统下MRIcroN、FSL6.05、Freesurfer7.1.1、MRtrix3、AFNI、ANTs的安装详解一、安装MRIcroN二、 FSL6.0.5完整安装与FSLeyes等Not Found修复Anaconda与虚拟环境(所有操作均在root下)获取最新版Anaconda3安装Anaconda3配置所有用户可用去掉恼人的base创建虚拟环境FSL与FSLeyes安装(所有操作均在root下)下载FSL安装FSL添加环境变量到/etc/bash.bashrc末尾 (ubuntu)或者 阅读详情

相关推荐

VSCode CMake 安装与配置详解

概述 在windows上使用cmake编译C/C++程序时,首先需要CMake,安装gcc/g++编译环境,然后使用VSCode 以及配置下CMakelist.txt。 所需工具: VSCode (需要安装以下插件) C/C++ C++ Intellisense CMake CMake tools CMake Tools Helper CMake MinGW 安装CMake 下载链接:...

Markus 8万+

BDA - BIOS Data Area

转自: http://blog.youkuaiyun.com/maplewasp/archive/2008/05/29/2494822.aspx Address Size    Description 00:00 256dwords Interrupt vector table 30:00 256bytes Stack area used during post and bootstrap 40:00

5089

ScanNet数据集详解

ScanNet 是一个 RGB-D 视频数据集,在超过 1500 次扫描中包含了 250 万个视图,并标注了 3D 相机位姿、表面重建和实例级的语义分割。为了收集这些数据,设计了一个易于使用且具有扩展性的 RGB-D 捕获系统,包括自动化的表面重建和众包的语义标注。如果您想下载 ScanNet 数据,请使用您的机构邮箱地址填写一份 ScanNet 使用条款协议,并发送至 scannet@googlegroups.com。压缩包是将3D的标注信息“拍扁”成2D图片的结果,对应原始视频的每一帧。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 3917

加个ing是什么意思_情侣第一次睡在一起是什么感觉?

▲点击上方蓝字关注「上戏腐女」【讲真,置顶上戏腐女的都酷得没边了】晚安昨日话题情侣第一次睡在一起是什么感觉?{今日话题见文末}一晚上没睡着在抢被子和他的呼噜声度过@qiao表面内心:我是谁 我在哪儿 我在干啥实际内心:开荤了@雨.com无法言喻的高兴我特么的终于得逞了@robin激动想做点什么又不知道做什么着急的不知道放哪里@别来无恙第一次和他出去玩睡一张床的时候满脑子就是等下他兽...

weixin_33512961的博客 1282

Verilator+VSCode实战:5分钟搞定Verilog语法检查与波形调试

本文详细介绍了如何将Verilator仿真器与VSCode编辑器高效集成,打造极速的Verilog开发工作流。通过环境配置、实时语法检查、一键仿真与波形生成等实战技巧,帮助IC设计工程师在几分钟内完成从代码编写到波形调试的全过程,大幅提升中小规模模块的验证效率。

weixin_28454475的博客 469

C#菜鸟教程学习笔记

C#菜鸟教程学习笔记 C#简介 C# 是一种编程语言,它是由微软开发的。 C# 编程是基于 C 和 C++ 编程语言的,它与 Java 也非常相似。 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。 .Net 框架(.Net Framework)能编写出下面类型的应用程序: ①Windows 应用程序 ②Web 应用程序 ③Web 服务 常用的C# 编程的开发工具:Visual Studio(VS:可视化工作室) C#程序结构 一个 C# 程序(C# 文件的后缀为 .cs)主要包括以下部分

mlc_WTMOTW的博客 4975

x86汇编语言

第一章 基础知识 Intel 8086 在实模式下可以访问 1MB 的内存空间,地址范围为 0x00000 到 0xFFFFF。 出于各方面的考虑,计算机系统的设计者将这 1MB 的内存空间从物理上分为几个部分。 8086 有 20 根地址线,但并非全都用来访问 DRAM,也就是内存条。事实上,这些地址 线经过分配,大部分用于访问 DRAM,剩余的部分给了只读存储器 ROM 和外围的板卡. 1.0x00000-0x9FFFF:DRAM(动态随机访问存储器): 2.0xA0000-0xEFFFF: 分给外

1839

c语言【分糖果】2023蓝桥杯4124(枚举,递归,dfs)

但是这是不符合我们糖果刚好分完的条件的,我们应该往回退到上一层,也就是孩子6这层,然后j+1=3,孩子7分到3个第二种糖果,这也不符合我们糖果刚好分完的条件,然后就会再次回退到孩子6这里,然后j+1=4,让我们的孩子7获得5块第二种糖果,然后还是不符合糖果刚分完的条件,于是再一次退回到孩子6这里,然后就会有外循环i+1=1,j=1,孩子7分到1块第一种糖果1块第二块糖果......然后就是这样的不停地回溯,试探,直到把整棵树遍历一遍,并且记录所有的满足条件的组合。先放一下我的代码,我的代码超时啦救命!

weixin_74331419的博客 730

tplink错误代码51215_GSM错误代码表

GSM device:AT+CMEE=1AT&WCME ERROR's (GSM Equipment related codes)Error DescriptionCME ERROR: 0 Phone failureCME ERROR: 1 No connection to phoneCME ERROR: 2 Phone adapter link reservedCME ERROR: 3 ...

weixin_39609822的博客 1396

Dynamics 365从入门到精通:一站式掌握微软智能商业应用平台

很多新手学Dynamics 365时,容易陷入“死记功能”的误区,其实这款平台的核心价值不是“功能多全”,而是“能适配企业业务流程,通过生态集成提升效率”。先从具体业务场景入手,理解每个功能的实际价值;再通过生态集成拓展系统能力;最后通过开发实现定制化,满足企业的特殊需求。按照这个思路,新手不用害怕复杂,一步步落地实战,3个月就能从“入门”到“能独立负责项目”。如果在学习过程中遇到具体问题(比如部署报错、数据迁移失败),欢迎在评论区留言,我会结合实战经验帮你解答!

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1038

多源异构数据在线可视化ETL编排平台深度实践:基于Python与Apache Calcite的现代数据管道构建

在当今企业数据环境中,数据源呈现爆发式增长与高度异构性。传统ETL工具面对多源(MySQL、PostgreSQL、MongoDB、Hive、文件系统等)与异构(结构化、半结构化、非结构化)数据时,往往面临扩展性差、学习曲线陡峭、难以融入现代DevOps体系等问题。本文深入探讨了如何构建一个基于Python/Pandas、Apache Calcite(通过JPype桥接)以及Vue.js前端的轻量级、在线可视化ETL编排平台。

2201_76125261的博客 74

操作系统的自我修养-03-"Hello,World横空出世"

操作系统的自我修养-03-"Hello,World横空出世"

K_Linux_ManのBlog 1982

【华为OD机试】真题E卷-一种字符串压缩表示的解压(C++)

有一种简易压缩算法:针对全部为小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串aaabbccccd 经过压缩变成字符串 3abb4cd请您编写解压函数,根据输入的字符串, 判断其是否为合法压缩过的字符串若输入合法则输出解压缩后的字符串 否则输出字符串!error来报告错误。

u014481728的博客 892

读《程序员自我修养》收获

2017-2-12 1.程序从简单做起,再逐步展开,变得复杂。 2.只有真正写书的人才能体会“水平有限的分量”,以此得出只有做了才能真正体会其中味 3.程序员的自我修养不是学习语言和工具,而是每个想成为编程高手的内功。 4.提升程序员的思考境界 5.软件最底层到CPU指令,x86,x64,MIPS等 6.计算机核心硬件CPU,内存,I

baidu_34700419的博客 625

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

读书笔记-《程序员的自我修养》

程序员的自我修养 第一部分 温故知新 1.2 硬件基础 PCI总线:Peripheral Component Interconnect,外设部件互联标准。一种局部并行总线标准,由ISA总线(Industy Standard Architecture,工业标准结构)。后又发展出PCI Express 北桥:连接高速设备(PCI Brigde),南桥:连接低速设备,然后汇总到北桥。CPU、内...

qq_36281031的博客 564

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

计算机操作系统读书笔记

程序员的自我修养--链接、装载与库笔记: 写的比较好的《程序员的自我修养》的笔记 编译分成预编译,编译,链接几个过程,每个过程做什么。obj,elf文件内容是什么,data区,堆,栈区等,内存布局堆,栈,大小端,link,各种lib库,系统调用,基本就差不多了 https://blog.youkuaiyun.com/fengbingchun/article/details/102230252 <x86架构操作系统内核的实现>:是os的最简单实现。学习os必须学汇编 比如:进程上下文切换,即用汇编保存现场。

fdsafwagdagadg6576的专栏 307

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

从零手写操作系统之RVOS内存管理模块简单实现-02

RVOS操作系统内存管理简单实现

m0_53157173的博客 1400

《程序员的自我修养》笔记三:静态链接

空间与地址分配 链接器如何将多个目标文件的各个段合并到输出文件。地址和空间指的是程序装载后的虚拟地址中的虚拟地址空间分配。 按序叠加 相似段合并 两步链接方法 链接前后的程序中所使用的的地址是程序在进程中的虚拟地址 第一步 空间域地址分配 扫描所有目标文件,获取它们的信息,将所有目标文件的符号表中的定义和引用放到全局符号表中,计算输出文件中各个段合并后的长度与位置,建立映射关系 第二步 符号...

u014773418的专栏 209

操作系统实验Ucore:bootmain(二)

本文首发于我的博客 书接上回,我们继续来看ucore操作系统的启动部分。 上一部分结束时,程序已经从最开始的bootasm跳转到了bootmain函数。 1. 读取磁盘 由于BIOS只会把第一个扇区加载到磁盘上,而我们的操作系统的大小肯定不止512KB,所以要在boot程序中把操作系统其余的部分加载到内存上。 总体来看,这个函数的意思就是将磁盘上从1开始的8个扇区加载到ELFHDR(0x1_0000)的位置上。由于第0个扇区(就是我们现在正在执行的代码)已经被BIOS加载上了,所以从第一个扇区开始加载就行

zzzzzec的博客 617

操作系统的自我修养-05 从实模式到保护模式的飞跃

操作系统的自我修养-04 从实模式到保护模式的飞跃

K_Linux_ManのBlog 325

操作系统-真象还原的一点心得

当人按下笔记本开机键时.cpu的cs寄存器(基址)跟ip(偏移量)寄存器加电.被强制初始化为(jmp xxx:xxx) 跳转到bios所在的地址.       接着bios开机自检(这个不需要了解,只需了解最后跳转到0x7c00处即可.对于写kernel的人来说也是透明的.除非你是写bios的).它将自动从0盘1扇区加载mbr(主引导程序,512字节必须是以0x55,0xaa结尾.

qq_33620667的博客 2993

《程序员的自我修养——链接、装载与库》读书笔记—— 4.6 链接过程控制

对于一些特殊要求的程序,须要指定输出文件的各个段虚拟地址、段的名称、段存放的顺序等。这些程序包括但不仅限于: 操作系统内核 BIOS ( Basic Input Output System) Boot Loader 嵌入式程序 脱离操作系统的硬盘分区软件PQMagic等 内核驱动程序 测试程序 为了不使用库,这里使用了嵌入汇编的方式进行系统调用 char* str = "Hello World...

weixin_43512663的博客 238

c++ 写x64汇编 5参数_自己动手写操作系统 8086sos

这是一个非常简单的demo性质的操作系统,可以称之为操作系统是因为已经实现了多任务以及任务切换:这可以说是操作系统最核心的功能。8086sos的实现仅仅使用了300行汇编代码,运行在MBR中:这是BIOS读取并执行的第一个程序。虽然简单,然而却足够让人了解很多基本概念,包括汇编、寄存器、寻址、BIOS、中断、多任务,任务切换。你可以使用bochs模拟器进行测试,这是一个强大的开源x86模拟器,模拟...

weixin_39554172的博客 166

读书-程序员的自我修养-链接、封装与库(11: 第四章:静态链接(4)--链接控制过程、ld默认链接脚本,TinyHelloWorld.c 和BFD库

读书-程序员的自我修养-链接、封装与库(11: 第四章:静态链接(4)--链接控制过程、链接脚本和BFD库)1. 链接控制过程1.1 操作系统内核是啥?1.2 链接控制脚本1.2.1 ld 链接1.3 最小的程序1.3.1 TinyHelloWorld.c 代码,编译链接,执行1.3.2 TinyHelloWorld.c 解释:1.4 ld 链接脚本-TinyHelloWorld.lds2. BFD库 1. 链接控制过程 绝大部分情况下,我们使用链接器提供的默认链接器规则对目标文件进行链接。 但是对于一些特

哈尼的博客 474

静态链接的一点小总结(二) 《程序员的自我修养》·笔记

静态链接的一点小总结(二)空间与地址分配 问题引入   可执行文件与目标文件的格式是类似的,所以,可以说可执行文件中的代码段和数据段都是由输入的目标文件中合并而来的。   解决方法:按序叠加 顾名思义,该方法就是将各个目标文件依次合并叠加 问题   合并的过程中,每个段都需要有一定的地址和空间的对齐要求,对于规模稍大的应用程序,对应的输出文件会有成百上千的段,很显然,这种做法很浪费空间

hust_sheng的专栏 806

汇编 写像素中断_自己动手写操作系统 8086sos

这是一个非常简单的demo性质的操作系统,可以称之为操作系统是因为已经实现了多任务以及任务切换:这可以说是操作系统最核心的功能。8086sos的实现仅仅使用了300行汇编代码,运行在MBR中:这是BIOS读取并执行的第一个程序。虽然简单,然而却足够让人了解很多基本概念,包括汇编、寄存器、寻址、BIOS、中断、多任务,任务切换。你可以使用bochs模拟器进行测试,这是一个强大的开源x86模拟器,模拟...

weixin_33277243的博客 297
上一篇: 操作系统的自我修养-01-万事开头难
下一篇: 操作系统的自我修养-03-"Hello,World横空出世"
karry_vcent
博客等级 码龄15年 93粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值