结合最近学习清华的OS课,先用“人话”来高度抽象的描述一下我自己的理解.CPU在系统加电也就是我们按下电源开关后,开始初始化他的寄存器,主要是cs和eip(本文基于x86架构),然后在ROM中找到一个叫BIOS(Basic Input Output System),加载到RAM中然后开始执行他,他在进行完设备的自检和初始化之后,就根据他自己内部的“我该去哪个设备启动加载程序”表,将其中第一个设备的主引导扇区加载到内存中来,也就是将系统的控制权转交给了这个程序,然后他在正确的引用了bootload…
  实验内核版本:0.11 ◆ 从开机到main函数的三步: ① 启动BIOS,准备实模式下的中断向量表和中断服务程序: ② 从启动盘加载OS程序到内存中,加载OS程序的工作就是利用第一步中的中断服务程序实现的: ③ 为执行保护模式下32位的main函数做过渡工作. ➩ Intel将所有80x86系列的CPU硬件都设计为加电即进入16位实模式状态运行: ➩ 将CPU硬件逻辑设计为在加电瞬间强行将CS置为0xFFFF,IP置为0x0000,即是CS:IP指向了0xFFFF0这个地址: 整个过程是一…
下面以访问baidu页面来做一个过程分析 输入 URL:http://www.baidu.com DNS 域名解析 计算机无法识别域名,计算机与计算机之间要想进行通信,必须通过ip地址用来定位该计算机所在的位置 在浏览器中,输入的ip地址或者域名,默认给你加了一个80端口号(对方的服务器监听的就是80端口) 158.12.25.652 域名就是为了好记 为了好记,所以我们的万维网提供了 一个 域名这样的概念 当你输入了 ip 地址后,浏览器会自动去 找DNS域名解析服务器, 建立 TCP 连接(…
摘要: 本文从提升权限漏洞的一系列巧妙的方法来绕过受保护的Mac OS X.有些已经被处于底层控制,但由于它们存在着更多的认证和修补程序,我们不妨让这些提供出来,以便需要的人学习它们.虽然我不只是要利用脚本,而且之后我将解释可以做哪些事情,让你利用这些技巧能够充分地进行研究. 破解用户密码 在过去... 本文从提升权限漏洞的一系列巧妙的方法来绕过受保护的Mac OS X.有些已经被处于底层控制,但由于它们存在着更多的认证和修补程序,我们不妨让这些提供出来,以便需要的人学习它们.虽然我不只是要利用…
本文参考了如下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详解linux系统的启动过程及系统初始化 linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: BIOS POST自检 BIOS(Boot Sequence) 引导操作系统 加载对应引导上的MBR(bootloader) 主引导设置加载其BootLoader 加载操作系统 启动BIOS,准备实模式下的中断…
本文參考了例如以下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详细解释linux系统的启动过程及系统初始化 linux系统的启动流程 关于linux系统的启动流程我们能够按步进行划分为例如以下: BIOS POST自检 BIOS(Boot Sequence) 引导操作系统 载入对应引导上的MBR(bootloader) 主引导设置载入其BootLoader 载入操作系统 启动BIOS,准备实…
市面上采用RISC-V架构的CPU很多,且没有如X86那样高度细节的标准,故采用说明文档详细的SiFive Freedom U540-C000芯片来做介绍(下面统一称为FU540). FU540支持多种启动方式,且由MSEL针脚控制. 在了解启动流程之前,首先需要明确RISC-V的三种启动模式 M-mode(Machine Mode) S-mode(Supervisor Mode) U-mode(User Mode) 在系统加电启动后会处于M-mode,有关启动模式将在下文详细讲解. 通常,RI…
0x0 背景 在我参加的面试和我面试别人.或者参加别人对别人的面试的事后经常遇到的一个问题就是:请从计算机加电开始描述一下计算机启动到操作系统正式启动起来的全过程.这是一个考验对计算机体系结构和基本知识了解程度的问题.今天也就特别针对这个问题做一个回答,答案是基于80x86结构Linux 2.6及更高版本内核的为基准操作系统为例来回答的. 0x1 从加电到BIOS启动 STEP 1 加电引导寄存器置位 这一过程指的是,计算机加电后,一个特殊电路会在CPU对应的一阵针脚产生一个逻辑电平,这个电平的…
图片来自于https://blog.csdn.net/qq_27754983/article/details/75212666 1. UEFI或BIOS启动 服务器加电后,CPU 自动重置成初始状态,启动 BIOS boot program 开机程序. 2. POST自检 接着就会开始实行 POST,BIOS 或 UEFI 进行硬件检查的阶. 3. MBR引导 自检硬件没有问题时候,这里以 BIOS 为例,BIOS 将会直接去找硬盘的第一个扇区,找到前446字节,将 MBR 加载到内存中,MBR…
主要讲解了80x86cpu在启动的时候时bios如何工作,以及如何最终转换到保护模式. 1.1 启动bios 80x86作为冯诺依曼结构下的cpu,工作模式也是取指执行,即cpu根据cs:ip寄存器的值‘计算’出一个真正的物理地址,在8086实模式的情况下这个地址是20位的,然后通过20位的地址线去寻址.20位的地址线对应1MB可寻址空间,这里特意使用了可寻址空间而不是我一直以为的内存空间,言下之意1MB的寻址空间包括内存(RAM)也包括一些其他的存储介质,而bios就放在这些其他的存储介质上,…
对于网址栏的URL不同的操作方式有不同的加载资源.获取数据的方式,下面的详细过程针对"在地址栏输入URL,按enter(回车)键加载资源"此种操作方式做解析,其它的方式的过程大同小异,差异会在后面再做分析. 1. 浏览器开启一个线程来处理这个请求,对URL判断如果是http协议就按照web方式处理: 2. 浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容(此时没有向服务端发请求).若没有,则进行下一步操作(后面需要向服务端发送请求): 3. 通过D…
总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAND flash),这种方法的缺点是在内核和根文件系统出现修改时我们就不得不得重新对flash进行擦除和烧写工作,这个非常耗时,在产品开发调试阶段非常 不适合,只有在最终成品时才比较适用.哪在开发阶段采用哪种方式比较好呢?先还是看看现在都有些常用的存储设备吧.我们常见的存储设备有:硬盘,U 盘,SD卡…
优化tableView加载cell与model的过程 效果图 说明 1. 用多态的特性来优化tableView加载cell与model的过程 2. swift写起来果然要比Objective-C简洁了不少 源码 https://github.com/YouXianMing/Swift-TableViewDemo https://github.com/YouXianMing/OC-TableViewDemo // // ViewController.swift // Swift-TableView…
安装nuget package包提示错误 install-package : 由于无法加载项目 mydemo 的详细信息,操作失败 解决方法 项目用dotnet cli 命令dotnet new mvc创建,然后打开工程文件 mydemo.csproj . 关闭vs,重新打开项目.…
今日内容概要 scrapy架构和目录介绍 scrapy解析数据 setting中相关配置 全站爬取cnblgos文章 存储数据 爬虫中间件和下载中间件 加代理,加header,集成selenium 内容详细 1.scrapy架构和目录介绍 # pip3 install scrapy # 创建项目:scrapy startproject cnblogs_spider 等同于django创建项目 # 创建爬虫:scrapy genspider cnblogs www.cnblogs.com 等同于创…
国产CPU 申威1621 异数OS基础组件理论性能测试报告 文章目录 国产CPU 申威1621 异数OS基础组件理论性能测试报告 前言 测试平台 测试项目 SW1621 异数OS 容器虚拟交换机模拟性能测试 分数与意义说明 SW1621 异数OS TCP协议栈理论性能模拟测试 测试总结 测试程序运行结果图 前言 一直以来,异数OS都希望能够支援国产CPU生态的建设,这次机缘来到来到成都申威,看到了传说中的申威CPU,并做了异数OS基础组件的理论测试,在此感谢成都申威提供的SW 1621测试环境,…
本文将通过一个实际的业务需求,讲解如何实现 极端场景下文字加粗加边框效果 文字多重边框的效果 需求背景 - 文字的二次加粗 今天遇到这样一个有意思的问题: 在文字展示的时候,利用了 font-weight: bold 给文字进行加粗,但是觉得还是不够粗,有什么办法能够让文字更粗一点呢? emm,不考虑兼容性的话,答案是可以利用文字的 -webkit-text-stroke 属性,给文字二次加粗. MDN - webkit-text-stroke: 该属性为文本字符添加了一个边框(笔锋),指定了边…
实验1 :bootload启动ucore os 1.0实验内容: lab1中包含一个bootloader和一个OS.这个bootloader可以切换到X86保护模式,能够读磁盘并加载ELF执行文件格式,并显示字符.而这lab1中的OS只是一个可以处理时钟中断和显示字符的幼儿园级别OS.bootload(引导装入)的翻译. Lab1主要是关于操作系统如何启动,以及如何中断,函数调用栈相关的知识. 1.1 x86启动顺序 硬件启动后,怎么把操作系统放到内存中去运行. 1 BIOS启动过程 从BIOS…
http://blog.csdn.net/fatsandwich/article/details/2131707# http://jakielong.iteye.com/blog/771663 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态).此时处理器处于特权级最高的(0级)内核代码中执行.当进程处于内核态时,执行的内核代码会使用当前进程的内核栈.每个进程都有自己的内核栈.当进程在执行用户自己的代码时,则称其处于用户运行态(用户态).即此时处理…
环境说明:虚拟机 CentOS7中解压一个8G的包时,内核报错 Message from syslogd@cosmo-01 at Apr 25 11:05:59 ... kernel:NMI watchdog: BUG: soft lockup - CPU#6 stuck for 21s! [xfs-data/dm-0:451] 内核软死锁(soft lockup)bug原因分析 Soft lockup名称解释:所谓,soft lockup就是说,这个bug没有让系统彻底死机,但是若干个进程(或…
pytorch允许把在GPU上训练的模型加载到CPU上,也允许把在CPU上训练的模型加载到GPU上.CPU->CPU,GPU->GPU torch.load('gen_500000.pkl') GPU->CPU torch.load('gen_500000.pkl', map_location=lambda storage, loc: storage) CPU->GPU1 torch.load('gen_500000.pkl', map_location=lambda storag…
在vm虚拟机中 修改 虚拟机==>设置==> 处理器==>虚拟化引擎(选第二项:虚拟化Intel VT-x/EPT 或 AMD-V/RVI(V) )     # vmx或svm :表示VCPU支持虚拟化 cat /proc/cpuinfo | grep vmx   # 装载kvm模块 modprobe kvm   # 查看模块是否已经安装,必须保证安装了kvm_intel模块 [root@7 ~]# lsmod | grep kvm kvm_intel 162153 0 kvm 5252…
实际上,我们要做的工作是根据内核的Program header table的信息进行类似下面这个C语言语句的内存复制: memcpy(p_vaddr, BaseOfLoaderPhyAddr+p_offset, p_filesz); 复制可能不止一次,如果Program header有n个,复制就进行n次. 每一个Program header都描述一个段,语句中的P_offset为段在文件中的偏移,p_filesz为段在文件中的长度,p_vaddr为段在内存中的虚拟地址. 由ld生成的可执行文件…
先看一下标准定义的浏览器渲染过程(网上找的): 浏览器打开网页的过程 用户第一次访问网址,浏览器向服务器发出请求,服务器返回html文件: 浏览器开始载入html代码,发现 head 标签内有一个 link 标签引用外部CSS或JS文件: 浏览器又发出CSS及JS文件的请求,服务器返回这个CSS,JS文件: 浏览器继续载入html中 body 部分的代码,并且CSS,JS文件已经拿到手了,可以开始渲染页面了: 浏览器在代码中发现一个 img 标签引用了一张图片,向服务器发出请求.此时浏览器不会等…
DTS是Device Tree Source的缩写,用来描述设备的硬件细节.在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备.resource.i2c_board_info.spi_board_info以及各种硬件的platform_data.为了去掉这些垃圾代码,Linux采用DTS这种新的数据结构来描述硬件设备.采用…
浏览器加载和渲染html的顺序 1. IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的. 2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完). 3. 如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载. 4. 样式表在下载完成后,将和以前下载的所有样式表一起进行解析,解析完成后,将对此前所有元素(含以前已经渲染的)重新进行渲染. 5. JS.CSS中如有重定义,后定义函…
仅做学习参考,侵权删 原文链接:风吹De麦浪   https://www.cnblogs.com/CandyManPing/p/6635008.html 一.浏览器 浏览器的主要功能是将用户选择的web资源呈现出来,它需要从服务器请求资源,并将其显示在浏览器窗口中,资源的格式通常是HTML,也包括PDF.image及其他格式. 用户用URI(Uniform Resource Identifier统一资源标识符)来指定所请求资源的位置,通过DNS查询,将网址转换为IP地址. 整个浏览器工作的流程:…
注:这题胜在区分度高,知识点覆盖广,再不懂的人,也能答出几句, 而高手可以根据自己擅长的领域自由发挥,从URL规范.HTTP协议.DNS.CDN.数据库查询. 到浏览器流式解析.CSS规则构建.layout.paint.onload/domready.JS执行.JS API绑定等等:    详细版: 1.浏览器会开启一个线程来处理这个请求,对 URL 分析判断如果是 http 协议就按照 Web 方式来处理;          2.调用浏览器内核中的对应方法,比如 WebView 中的 load…
曾经使用flask_paginate(地址:https://blog.csdn.net/qq_42239520/article/details/80378095)进行分页,现在又想新的想法,怎么才能和其它大多数主流网站一样,通过点击加载更多,获取到更多的页面呢? 源码地址:https://github.com/1417766861/flask_vue 首先给大家看一下,我最近用flask-vue完成加载更多的效果吧,点击加载更多后,获取更多帖子: 让我们从头开始吧. 首先我新建了一个flask_…
1.当发送一个URL请求时,浏览器会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询,解析获取网址的IP地址:2.浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接.该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在浏览器和服务器之间传递.该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文:3.一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求.远…