• 13539426682
  • liuyixi2009@163.com

目录:杂

操作系统:精髓(三)

第三章

进程状态:五状态模型

  • 运行态
  • 就绪态:当操作系统准备好再接纳一个进程时,把一个进程从新建态转换到就绪态。
  • 阻塞/等待态
  • 新建态:通常是进程控制块已经创建但是还未加载到内存中的新内存。
  • 退出态

单阻塞队列和多阻塞队列:

单阻塞队列时,当一个事件发生时,操作系统必须扫描整个阻塞队列,搜索那些等待该事件的进程,这样子效率就会很低,一种改进方法就是维护多个队列,每个事件对应一个队列(比如打印机就绪了这个事件A对应队列1),另一种改进方法就是按照优先级方案分配进程,这样操作系统很容易确定哪个就绪程序具有最高优先级且等待时间最长。

包含两个挂起态的模型

最左边的两个状态代表了这些进程在外存那里同时在“监听”事件发生,若事件发生了则这个在外存的进程从阻塞态变成挂起态,等待被加载进内存。而中间的“就绪 –> 就绪/挂起”过程,是因为假如释放内存来获得足够空间的唯一方法就是挂起一个就绪态进程,则这种转换也是必须的。或者为了保护高优先级的阻塞状态进程,系统可能会选择挂起一个低优先级的就绪进程。同理在下面的阻塞换入也是这样,把优先级高的先换进去。

进程控制结构:

1.进程位置:这里先引用一个概念叫进程映像,它由用户数据,用户程序,栈,进程数据块组成,它是进程的物理表示(就是描述一个进程要用的东西)。操作系统要跟踪每个进程映像的哪个部分仍然在内存中,同时操作系统维护的进程表必须给出每个进程映像中的每页的位置。

2.进程属性:进程标识符(用户ID),处理器状态信息,进程控制信息(优先级)

进程切换:

中断分为两种,中断和陷阱,前者是与当前正在运行进程无关的某种外部事件相关,如完成一次I/O操作,而后者则是与进程产生的错误或者异常条件相关。

1.时钟中断,如果进程的执行时间超过了最大允许时间段

2.I/O中断

3.内存失效,在内存中找不到要的东西,就会发出调入内存块的I/O请求,内存失效进程将进入阻塞态。操作系统切换进程

进程切换和模式切换的不同:

当进程调用系统调用或者发生中断时,CPU从用户模式(用户态)切换成内核模式(内核态),此时,无论是系统调用程序还是中断服务程序,都处于当前进程的上下文中,并没有发生进程上下文切换。
当系统调用或中断处理程序返回时,CPU要从内核模式切换回用户模式,此时会执行操作系统的调用程序。如果发现就需队列中有比当前进程更高的优先级的进程,则会发生进程切换:当前进程信息被保存,切换到就绪队列中的那个高优先级进程;否则,直接返回当前进程的用户模式,不会发生上下文切换。

每个进程都拥有两个堆栈:用户空间的堆栈和内核空间堆栈
用户进程:执行用户空间的代码的程序,使用用户堆栈
系统进程:执行内核空间代码(系统调用或中断)的程序,使用内核堆栈(系统堆栈)
这里的用户进程和系统进程使用同一个PCB,他们并不是两个实体进程,而是同一个进程的两个侧面。当调用系统调用或发生中断时,CPU切换到内核态,用户进程“变身”系统进程,此时的寄存器上下文保存在系统进程的堆栈上,以便系统调用返回后的恢复。

Unix SVR4 进程管理

进程状态:Unix操作系统中共有九种状态,值得一提的是有一个状态叫抢占态。只有在进程准备从内核模式转换到用户模式时才可能发生抢占。

进程描述:分为用户级上下文和系统级上下文和寄存器上下文

进程创建:fork()

Arduino:串口的使用

输出

 

I LOVE YOU (单片机)

 

操作系统:精髓(一)

第一章

1.长I/O和短I/O

记得之前在看计算机科学导论时,意识到cpu的处理速度,是远远大于其他很多设备的,你比如说打印机什么的,因此在进行相关的I/O操作时,操作系统往往要进行一个中断处理,这就有了短I/O和长I/O,前者指I/O的准备时间比较短,这个等待时间里处理器就会干其他活直到I/O设备发来一个中断信号。而长I/O指设备准备时间过长以至于cpu已经执行到了下一个I/O操作了,这时就会不可避免地进入等待时期,但总体上我们可以看出有这个中断处理可以大大地提升cpu工作效率与减少等待时间。

2.中断处理

当设备给处理器发一个中断信号后,处理器会对中断进行测试,确定后给它发送确认信号(你不要再叫了)然后处理器就要保存当前程序所需的信息。包括:程序状态字(PSW)和保存在程序计数器(PC)中下一条要执行的指令地址(这些信息被压入控制栈)。搞定后再把中断程序入口地址装入程序计数器。

3.多个中断

当有多个中断时,你是不是首先就想到了禁止中断呢?然鹅这样是不合理的,你比如当计算机接受来自通信线的输入时,可能需要快速接受,让出更多空间,否则由于I/O设备的缓冲区溢满或溢出导致数据丢失。

4.Cache:

  • 高速缓存大小(即Cache有多大)
  • 块大小(每次读进去的块多大。太小麻烦太大浪费)
  • 映射函数与置换函数(读进来数据块要去哪里,置换哪个数据块来给新的腾位置)
  • 写策略(是块有更新就发生写操作还是直到当块被置换时再发送写操作)

第二章

1.操作系统的发展史

1.1串行系统

1.2简单的批处理系统(用户模式,内核模式)

1.3多道批处理系统,就是在等待I/O时,处理器可以切换到另一个可能并不在等待I/O的作业,这种处理被称为多道程序设计或多任务处理

1.4分时系统(CTSS),以约0.2s一个的速度产生中断,中断后操作系统恢复控制权,并将处理器分配给另一个用户

2.进程

为了解决不正确的同步,失败的互斥,不确定的程序操作,死锁(我们都有对方需要的东西),我们引进了进程,进程由三部分组成:一段可执行的程序,数据所需相关数据(变量,工作空间,缓冲区),程序执行的上下文(进程状态)

3.内存管理

操作系统担负着五项存储器管理职责:进程隔离,自动分配和管理,支持模块化程序设计,保护和访问控制,长期存储。典型情况下,操作系统使用虚存和文件系统机制来满足这些要求,这里又引入了一个分页系统,在分页系统中进程由许多固定大小的块组成,这些块称为页。程序通过虚地址访问字,虚地址由页号和页中的偏移量组成。进程的每页都可置于内存的任何地方,分页系统提供了程序中使用的虚地址和内存中的实地址或物理地址之间的动态映射。若某个进程的页少了,就去载入这个缺页。

4.调度和资源管理

说白了就是给谁先用

5.对称多处理(SMP)和多线程

两者是互补关系

怎么删掉Category Archive

一开始找了很久都找不到…然后点击分类时巨丑,标题变成什么什么 Category Archive C++,Category Archive 算法,balbal什么的,事实上把那个category.php 里面的东西删了就行

这个计网有丶东西(三)

关于各种各样的欺骗..

  1. ARP 欺骗:先来复习一下 arp 协议,其实就是把 ip 地址转化成 mac 地址,而当同一子网里面一台机子不知道另一台机子的mac地址时,这一台机子就会广播一个 ARP 查询分组,同一子网内的所有计算机都会收到并且进行检查,符合的就回报回去,告诉那个机子我在这里。这时,我们可以发现,总有沙雕可以冒充那个目标机子告诉要找的机的那个计算机说我就是它,欸这时就欺骗成功了。防止方法网上查查就有,我觉得最有效的就是把动态arp表改成静态的(表内有所有的内网机子mac地址)

这个计网有丶东西(一)

是关于路有选择算法的,也是Dijkstra算法和Bellman-Ford算法的应用把,终于知道这个有什么用了….

总的来说这个路由算法分为两个:链路状态路由选择算法 和 距离向量路由选择算法,前者简称 LS,后者简称 DV。

LS:看上去很高端霸气,实际上也就那个样子,LS算法是由链路状态广播算法加上这个Dijkstra算法而来的,事实上由于Dijkstra算法需要知道全局的链路信息,因此必须在进行疯狂计算前进行数据之间的传递,然后开始松弛计算最短路径(某个点到其余点的最短路径)。当然这个算法也存在着路由震荡的问题,简单的说就是假如四个路由器都在同一时间点进行计算,分发,则会出现其余三个路由器一起选择同一条在它们当时看来不拥挤的道路,然后….就炸了,因此每台路由器会发送链路通告让时间随机化

DV:不同于上,LS算法并不需要知道每一条链路的信息,相反它只知道自己和邻居链路的信息以及它邻居发给他的信息。在收到第一批邻居发的信息后,该路由器开始计算,更新(把所有已知的边带进去算,看是否能进行松弛)。更新后把结果分发给自己的邻居,显然这个过程是异步的。然后这个算法的问题是会出现故障(废话),就是因为它是异步的,信息改变时感觉会给各个路由器之间造成误会,而每个路由器知道的也只是 “诶,我的邻居告诉我他有一条可以去x点的路而且代价不高,可以啊小老弟”。这里就看出来和LS算法的不同,LS算法中的路由器是确切的知道每一条链路的信息的,因此不会有“误会”,而误会造成的后果就是一旦某一条链路的拥挤程度,假设是 x(u,v)发生猛增,这时对于第三方路由器 a 来说 a 本来认为 u 有一条路代价不高就可以去到 v 因此就对 u 说 “我有一条路去v代价不高哦”(实际上这时这一条路已经高的一比,u不知道a这个沙雕说的路就是自己通向v的路),这时 u 为了把东西发往 v 会把文件发给 a ,同时告诉a说我知道一条路可以以很低的代价通向 x(其实就是z传递错误信息造成的误会,u说的就包含z说的那一条)然后 a 说不错然后转手把文件甩给 u 。。。

然后,这样的误会会一直加深直到超过某个阈值(通常是 y(a,v)的代价),即文件在 a 和 u 之间反复横跳 🙂

这个时候就有一种方法叫毒性逆转,其实就是欺骗啦,a骗u说自己去x的路是无穷大的。。也不是很有用,只适合于三角形的路由。

世界,肝!

搞了一整个晚上结果博客看起来还不算很好看的样子…

 

啊又打死了一只蚊子