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

网页制作怎么做多个网站河南网站优化公司

网页制作怎么做多个网站,河南网站优化公司,北京最新疫情最新公布,网站 板块 栏目1.信号的处理 a.处理信号的合适时机:进程由内核态返回到用户态的时候 b.如果是默认/忽略:照常 c.捕捉过程,实际上就如右上所示 当执行自定义方法的时候,要进行身份切换(由内核态转化为用户态,以免在用户态…

1.信号的处理 

a.处理信号的合适时机:进程由内核态返回到用户态的时候

b.如果是默认/忽略:照常

c.捕捉过程,实际上就如右上所示

        当执行自定义方法的时候,要进行身份切换(由内核态转化为用户态,以免在用户态写一些非法操作需要(内核权限才可以进行的操作))

问题:

1.我的进程,凭什么进入内核???
(是一个进程,那它就会被调度,进入内核
时间片,执行一段时间就切换)

 2.内核和用户态

1.硬件中断

• 中断向量表就是操作系统的⼀部分,启动就加载到内存中了

• 通过外部硬件中断,操作系统就不需要对外设进⾏任何周期性的检测或者轮询

• 由外部设备触发的,中断系统运⾏流程,叫做硬件中断

操作系统是怎么运行的

硬件部分

输入设备输入的数据信号,储存在存储器里面,数据信号不喝CPU有直接联系

(1)OS怎么知道键盘上面有数据的?
            OS管理键盘。

(2)外部设备,间接和CPU链接在一起

         外设通过中断控制器向特定CPU针脚(“”)发送信号。->发送高低电频,来发送信号。

        中断控制器:接受外部设备发起中断,在来通知CPU.
        不同外设对应不同针脚,通过针脚设别外设。

(3)寄存器CPU有,其他设备也有。
         可以放,命令,地址,数据。

(4)具体过程

        外设向中断控制器发送中断信号,中断控制器向CPU针脚发送信号,CPU,得知中断,返回来获取中断号,->得知哪一个外设准备好了

 软件部分

(1)CPU,知道外设好了,但不知道怎么处理硬件发来的数据->软件来完成。

(2)中断向量表:就是一个函数指针数组。
        下标:中断号。

(3)以键盘为例:
        键盘向中断控制器发送中断信号,中断控制器向CPU针脚发送信号,CPU,得知中断,返回来获取中断号,->得知键盘准备好了

CPU用中断号在中断向量表里面找键盘的方法,然后CPU执行这个方法,就是读取,然后根据冯诺依曼体系,从外设开始读。

 实际上中断和信号一个样子

总结:OS不关注外设是否准备好,而是外设准备好,会叫我。

时钟中断

• 进程可以在操作系统的指挥下,被调度,被执⾏,那么操作系统⾃⼰被谁指挥,被谁推动执⾏呢?

        时钟源

• 外部设备可以触发硬件中断,但是这个是需要⽤⼾或者设备⾃⼰触发,有没有⾃⼰可以定期触发的 设备?

        有,时钟源

没有操作的时候,OS在干什么? 

 什么都没做。OS是暂停的。

什么都不干,很闲的话,肯定是不行的,我们要让它找事干
(1)在中断向量表添加:进程调度方法schdule()
(2)外设添加时钟源,以固定的频率(主频),向CPU发送特定的中断,OS在硬件时钟源的驱动下,进行调度。

current->count:也就可以视为是时间片,如果时间片耗尽的的话,就执行schdule()进程调度

综上:

OS是什么??

就是基于中断,进行中断方法调度,进行工作的软件。操作系统的本质:就是⼀个死循环。

linux0.11里面的时钟中断 

set_intr_gate:设置时钟中断

_time_interrput:里面包含一个函数->_do_timer 

_do_timer:

        减减时间片,如果时间还有,退出

        时间片 == 0 ,执行schdule方法。

/ Linux 内核0.11 // main.csched_init(); // 调度程序初始化(加载了任务0 的tr, ldtr) (kernel/sched.c) // 调度程序的初始化⼦程序。 void sched_init(void)
{...set_intr_gate(0x20, &timer_interrupt);// 修改中断控制器屏蔽码,允许时钟中断。 outb(inb_p(0x21) & ~0x01, 0x21);// 设置系统调⽤中断⻔。 set_system_gate(0x80, &system_call);...
}// system_call.s_timer_interrupt:...
;// do_timer(CPL)执⾏任务切换、计时等⼯作,在kernel/shched.c,305 ⾏实现。 call _do_timer ;// 'do_timer(long CPL)' does everything from
// 调度⼊⼝ void do_timer(long cpl)
{...schedule();
}void schedule(void)
{...switch_to(next); // 切换到任务号为next 的任务,并运⾏之。 
}

2.软件中断 

• 上述外部硬件中断,需要硬件设备触发。

• 有没有可能,因为软件原因,也触发上⾯的逻辑?有!

• 为了让操作系统⽀持进⾏系统调⽤,CPU也设计了对应的汇编指令(int或者syscall),可以让CPU内 部触发中断逻辑。

代码自己出现的错误,把这种归咎于异常

a/0!!->EFLAG发现进程间的溢出,把这个规定为一种由CPU内部出发的中断,生成中断号。

中断服务,异常处理。---->代码自己出现的错误,把这种归咎于异常,而不是软件中断


这个是由于软件导致硬件出错了,导致的中断,属于异常,而不是软件中断

由软件触发的错误叫做软件中断

CPU内部,自己可以让软件出发中断行为吗?

(1)“和上面不一样-硬件出错-自己的代码有错误” ----->异常

(2)让CPU通过软件主动中断。??

x86:
int 或者 syscall,自动让CPU触发一次中断

方法?? 编号??

编号:-x80

由指令集触发的中断

 系统调用表:每一个下标对应着一个系统调用,这个下标,叫做系统调用号。

以open为例子,

open,在汇编层面下,需要把系统函数调用表里面的,5(sys_open)推入寄存器eax(“move eax 5”),然后发送中断号0x80,

接受中断号,0x80,调用对应的注册方法,把 eax推入n里面,后面就是调用对应的系统调用方法

当我们进行系统调用的时候,具体是怎么进入操作系统,完成系统调用

(1)给CPU喂0x80 or syscall. - >执行中断处理方法

(2)0x80注册软中断,由对应的处理方法,
获得系统调用号,表,跟上述open一样

总结+问题

• ⽤⼾层怎么把系统调⽤号给操作系统?-寄存器(⽐如EAX)

• 操作系统怎么把返回值给⽤⼾?-寄存器或者⽤⼾传⼊的缓冲区地址

• 系统调⽤的过程,其实就是先int  、0x80、syscall陷⼊内核,本质就是触发软中断,CPU就会⾃动执 ⾏系统调⽤的处理⽅法,⽽这个⽅法会根据系统调⽤号,⾃动查表,执⾏对应的⽅法

• 系统调⽤号的本质:数组下标!

• 可是为什么我们⽤的系统调⽤,从来没有⻅过什么 int 0x80 或者 syscall 呢?都是直接调⽤ 上层的函数的啊?

• 那是因为Linux的gnuC标准库,给我们把⼏乎所有的系统调⽤全部封装了。

 

• 操作系统就是躺在中断处理例程上的代码块!

• CPU内部的软中断,⽐如int0x80或者syscall,我们叫做陷阱

• CPU内部的软中断,⽐如除零/野指针等,我们叫做异常。(所以,能理解“缺⻚异常” 为什么这么叫了吗?)

如何理解

如何理解内核和用户 

 

(1)内核页表:


虚拟地址到物理地址的映射。
内核区域映射到操作系统在屋里内存加载的位置

内核页表和用户页表有相同的作用

(2)

一个进程,一个用户页表,用户页表,会存在多份。“类比”

由于:

内核页表:操作系统的系统调用,中断符...
虚拟地址固定的,物理地址也是固定的。
讷河页表,系统只有一份,所有进程共享

所以:系统只有一份,所有进程共享。

内核页表映射到每个进程的3~4GB的空间,每个进程共用一份内核页表

结论:


1.意味着,无论进程如何调度,我们总能找到操作系统。
“内核页表映射到每个进程的3~4GB的空间”

问题2:用户区是个性化的,但内核区是一样的。
用户和内核都在0~4GB,
如果用户随便哪一个虚拟地址【3,4】GB,用户就可以随便访问内核中的代码和数据吗?

冲突:“OS为了保护自己,不相信任何人,必须采用系统调用的方式,才可以进行访问”

为了安全性和用户访问,
引入用户态和内核态:
用户态:以用户身份,只能访问自己的【0,3】GB空间
内核态:以内核的身份,运行你通过系统调用的方式,访问【3,4】GB

“不同身份访问不同空间”

问题3:在系统中,用户或者OS,怎么知道当前处在内核态还是用户态???

在CPU内部,一些位置,cs权限寄存器会记录
cs: 0 ->内核态
     3->用户

int 0x80 syscall->指向操作系统代码区, AND 3 - >0,才可以访问系统调用

用户态:以用户身份,只能访问自己的【0,3】GB空间,权限级别为3
内核态:以内核的身份,运行你通过系统调用的方式,访问【3,4】GB,权限级别为0

CPL:当前权限级别
0 :内核
3:用户


段描述符表
RPL
DPL
CPL

 

http://www.dtcms.com/wzjs/147976.html

相关文章:

  • 上饶市建设培训中心网站广告推广平台哪个好
  • 网站模板图深圳广告投放公司
  • 邹平网站建设湖北网络推广公司
  • 聊城网站建设电话百度智能建站系统
  • 网站手机端自适应百度秒收录软件工具
  • 用linux做网站知乎推广渠道
  • 房产网站建设的目的免费网页制作模板
  • wordpress 后台路径seo研究中心培训机构
  • 安徽博物馆网站建设的调研报告重庆关键词优化服务
  • 商丘专业做网站seo自媒体运营技巧
  • 新手学做免费网站爱站工具包下载
  • 网站硬件建设小程序推广赚佣金平台
  • 使用二级域名会影响网站收录seo怎么做最佳
  • 网站开发技术要学什么谷歌浏览器引擎入口
  • 南阳网站网络营销产品的特点
  • 南充网站开发百度数据分析
  • 唯品会网站推广策略百度指数官网
  • 网站开发与维护是学什么百度广告联盟怎么赚钱
  • 免费做网络推广的网站可靠吗优化排名案例
  • 新疆网站建设价格网上seo研究
  • 网站教程dw南昌seo招聘信息
  • 外贸网站开发哪家好网上广告宣传怎么做
  • wordpress 友情链接页技术优化seo
  • 比较好的网站设计公司苏州市网站
  • 刘琪 找谁做网站靠谱百度浏览器官网在线使用
  • 好的ftp网站哪个推广网站好
  • 遂宁市建设局网站百度在西安的公司叫什么
  • 网站怎么做动态背景图片今日要闻 最新热点
  • 设计网站官网狗天津百度seo排名优化
  • 网站如何安装dedecms百度首页关键词推广