当前位置: 首页 > news >正文

wordpress网站页面打开很慢深圳工业设计展2022

wordpress网站页面打开很慢,深圳工业设计展2022,手机微信营销软件,本地打开WordPress慢【README】 本文内容总结自 《操作系统-哈工大李治军老师》#xff0c;内容非常棒#xff0c;墙裂推荐#xff1b; 【1】操作系统接口 0#xff09;用户使用计算机3种方式#xff1a; 命令行#xff1b; 命令行执行 hello world图形界面#xff1b;如计算机磁盘浏览器…【README】 本文内容总结自 《操作系统-哈工大李治军老师》内容非常棒墙裂推荐 【1】操作系统接口 0用户使用计算机3种方式 命令行 命令行执行 hello world图形界面如计算机磁盘浏览器cd盘应用程序如word 1命令行 系统启动完成后 会执行shell主体程序 并打印出 /home/username/ 字符串 并scanf 等待用户输入用户输入后执行函数 fork()  exec() 申请cpu执行 output.c 代码 具体的 调用Fork() exec() 实现对cpu使用调用scanf() 实现对键盘的使用调用printf()实现对显示器的使用 【总结】命令行就是一段程序程序调用了一些函数来对计算机硬件进行使用 无论命令行还是图形界面都是普通C程序关键是调用了重要函数这才可以操作计算机硬件 【1.1】操作系统接口 1操作系统接口 指的就是 重要函数这些函数是操作系统对外提供的接口即接口表现为 函数调用又由操作系统提供所以称为系统调用 system call所以操作系统接口就是系统调用 2有哪些具体的操作系统接口 或系统调用呢 2.1操作系统接口标准 POSIX 为操作系统接口定义了统一的标准可以让相同的应用程序可以在不同的操作系统上运行即调用系统接口 POSIX(可移植操作系统接口)是一个公认的工业标准。规范中的操作系统是POSIX兼容的。 2.2到哪里去查询系统调用 posix 查询 X 通常都指 Unix 这是惯例 Posix 常用系统调用 8.1 posix --The most common POSIX system calls. 【小结】什么是操作系统接口被称为系统调用的函数 具体来说如 forkopenreadwrite 等函数如上图系统调用函数可以理解操作系统开放出来的操作操作系统的api【2】系统调用实现 【2.1】为啥不直接访问内核数据 不能直接访问内核内存需要通过系统调用访问内核数据 原因在于 内核有很多关键数据是不能被外泄的如root用户名密码而且访问可能带来被恶意修改的问题内核被修改可能导致操作系统不可用带来严重后果不能随意调用内核数据不能随意jmp的原因【2.2】内核态与用户态 0引入硬件设计把内存分为内核段与用户段计算机对内存的使用都是一段一段的使用 用户段的程序不能直接访问内核段的数据只能通过系统调用接口来完成用户段内核段都需要段寄存器来做两个段寄存器 CS DS代码段寄存器数据段寄存器 1如何区分 内核态与用户态 0 表示内核态 3 表示用户态   2可以看下 DPL CPL DPL- destination privilege level用于描述目标内存段的特权级存储在 GDT表中 特权级数字越大权限越低DPL存储在GDT中CPL-current privilege level 当前特权级 CPL存储在cs段寄存器中 3)    DPL  CPL 有什么作用 只有当当前特权级 CPL 小于等于 目标函数的DPL时才允许访问否则访问权限不足DPL CPL 数值越小级别越高 4    用户态请求内核态 用户态的DPL是3在执行用户态时会请求cs段寄存器会把DPL赋值给cs中的CPL而内核态的DPL是0当用户态访问内核态时 因CPL3而内核态DPL0权限不足所以访问段寄存器就会报错了 【例】用户态访问内核态权限不足 序号 代码 内存区域 描述 1 void main() {          whoami(); } 用户态 特权级CPL3CPL保存在cs段寄存器中 2 void whoami() {          printf(100,8); } 内核态 特权级CPL0 所以代码1 无法访问代码2 CPL保存在cs段寄存器中 【补充】GDT 一个GDT表项就描述一段内存GDT表示整个操作系统所以gdt表项无论数据段还是代码段对应gdt表项的DPL 全等于0 5那用户态如何访问内核态的代码呢 通过中断计算机提供的唯一进入内核的方法通过中断才能进入内核6系统调用核心 用户程序中包含一段包含 int指令的代码操作系统写中断处理获取想调用程序的编号操作系统根据编号执行代码【2.3】 系统调用具体实现 操作系统通过 int 0x80 这条中断指令操作系统才能进去 Printf() 调用 printf库函数 printf库函数调用 write库函数write库函数调用 write系统调用write库函数被编译成宏需要用宏 _syscall3 来展开成一段包含 int 0x80中断的 汇编代码因为 int 中断时进入内核的唯一方式【小结】 所以系统调用细节从宏 _syscall3 开始说起【2.4】linux系统调用实现细节 1syscall3 宏 通过实参我们知道 type赋值为intname赋值为writeatype赋值为inta赋值为fd 把typenameatypea 替换为右边的值 就会得到 int write(int a, int b, int c) {long __res;__asm_volative // 这个是内嵌汇编指令。。。。。。 } 其中 “a”(__res) 把 %eax寄存器数据 赋值给 __res 变量作为返回值 “”(__NR_##name) 把 __NR_write赋值给 %eax 寄存器“b”(long(a)) 把fd赋值给 %ebx寄存器“c((long)b)” 把 b 赋值给%ecx 寄存器其中 __NR_write 是系统调用号用来标识是哪种系统调用 如write 为 __NR_write open为  __NR_open 等 【补充】 syscall3 表示有3个参数syscall2 表示有2个参数 【总结】系统调用步骤 把一个系统调用号 赋值给eax调用 int 0x80 进入内核进入内核的唯一方法依靠int指令【2.5】int 0x80 中断指令 1int 中断指令 要查询 IDT 表通过IDT 找到中断要转到哪个地方去执行转到哪个中断服务程序执行 2 IDT 中断描述符表结构 处理函数入口点偏移 P DPL 01110 段选择符 处理函数入口点偏移 补充 中断是计算机设计中的里程碑的创新 通过 set_system_gate(0x80, system_call) 直到 0x80中断跑去 system_call 执行即初始化 中断描述符表 IDT表 当中断发生时查找  IDT找到中断处理函数入口地址并跳转到中断处理函数执行 3看代码 _set_gate(idt[n], 15, 3, addr) // idt 是中断向量表基址3赋值给 dpl又main函数入口的调用程序的cpl等于3所以main函数可以访问内核态 换句话说int80的在IDT的初始化故意把dpl设置为3了 system_call 赋值给 addr0x0008 赋值给 段选择符所以 cs:ip 8 : system_call 跳转到 cs:ip 去执行 system_call 这个函数 补充 cs0x0008又 cs的最后两位表示CPL所以 CPL 00; CS段寄存器结构 0000 0000 0000 1000 main函数 发起系统调用如 write此时 CPL3是用户态 write系统调用通过中断 int 0x80从 IDT 中断描述符表 查找80中断的服务程序入口地址 入口地址通过 cs:ip 来表示其中cs0x0008 由cs的最后两位表示CPL000所以进入内核态调用 system_call 执行特权级变成0了 【总结】 在初始化IDT的时候80号中断的DPL设置为3 故意让 CPL3 的用户代码能够进来一旦进来后又由于 cs设置为0x0008 其CPL000所以进入内核态的system_call 执行【2.6】system_call 功能 1 代码1 movl 0x10, %edx mov %dx, %ds mov %dx, %es 把ds es 都设置为0x10 补充 0x08是内核的代码段 0x10是内核的数据段 2 代码2 Call_sys_call_table (, %eax, 4) ; 根据 eax% 跳转到 sys_call_table 去执行 其中 eax是 __NR_write系统调用号 即跳转到 _sys_call_table 为基址的以 4*%eax 为偏移量的地址去执行 为啥是4 每个函数的指针为4个字节32位 也可以 把 sys_call_table 理解为函数表 【2.7】函数表 sys_call_table 存储函数指针的表 以 __NR_write4为例则下标为4的元素就是 sys_write 【小结】写文件调用过程 Step1用户调用  printf CPL3Step2printf 展成 int 0x80 而在 初始化 IDT时把 80号中断服务处理程序设置为sys_call补充80号中断的 IDT表项的DPL初始化为3 Step3调用 system_call 中断处理程序时 cs:ip0x0008:system_call其中cs的DPL0所以 CPL0进入内核态补充 cs0x0008表示代码段ds0x10表示数据段Step4system_call 根据传入的 系统调用号 __NR_write4  会查询 sys_call_table 函数表项 得到 sys_writeStep5调用 sys_write 函数【问题】 main函数所在内存的DPL3whoami所在内存的DPL0所以main函数无法直接调用 whoami函数 解决方法硬件提供了唯一渠道即中断让用户态访问内存态的程序 步骤1设置 eax72,72等于 whoami函数的系统调用号int 0x80 发生中断步骤2又 80号中断在IDT初始化时的中断服务程序是  system_call步骤3system_call 根据 eax72 查询 sys_call_table 系统调用函数表的72号元素值 sys_whoami步骤4执行 sys_whoami() 函数
http://www.zqtcl.cn/news/426361/

相关文章:

  • 广告联盟怎么建设网站做贸易 公司网站放哪里
  • 北京建设局网站首页开发游戏用什么软件
  • 做淘宝客网站能接广告吗网站悬浮二维码
  • 重庆自助建站模板网站建设juxinghulian
  • 优惠券网站怎么搭建宝安中心区规划
  • 网站建设中怎么添加源码会计常用的三个软件
  • vk汉化网站谁做的购物网站设计公司
  • 门户网站建设平台建设招标项目常挂网站有哪些
  • 公司海外网站建设龙海市城乡规划建设局网站
  • 温州哪里做网站设计seo报名在线咨询
  • 四川住房和城乡建设厅进不去网站网站专题方案
  • 企业网站维护服务做网站设计都需要什么软件
  • jsp电商网站开发教程盐城网站建设制作
  • 企业解决方案网站做企业官网多少钱
  • 宁波网站建设哪家比较好怎麽做网站
  • 诸塈市建设局网站做移动网站开发
  • 南京建站公司网站网站视频源码地址
  • 德阳建设局网站做公众号首图的网站
  • 南阳网站优化渠道山西太原最新消息
  • 发布做网站需求qq群centos wordpress 建站教程
  • 东阳网站建设yw126南京网站改版
  • discuz视频网站模板徐州专业网站建设公司哪家好
  • 网站开发投资成本Wordpress显示成缩略图
  • 网站域名和网站网址吗中东跨境电商平台有哪些
  • 常宁市城乡和住房建设网站怎样加强文化建设
  • 视频网站如何做营销策划模板网站 seo
  • 中企动力做网站好吗网页建设软件
  • 爱站网seo浙江省嘉兴市建设局网站
  • 南宁做网站比较好的公司有哪些贵阳网站上门备案业务
  • 网络叶子 网站推广做一手房做那个网站好