知识点0207

根据基址寻址方式的定义,操作数的有效地址是基址寄存器的内容加上形式地址(位移量)。

如何减少换页错误? 访问局部性(locality of reference)满足进程要求

如果系统只有用户态线程,则线程对操作系统是不可见的,操作系统只能调度进程;如果系统中有内核态线程,则操作系统可以按线程进行调度;

不可抢占式静态优先数法会使得优先级低的程序饿死,亦即长期得不到运行。

一个在线服务器通常需要读取存储着海量数据的数据库。为了提高服务器处理速度,通常需要加cache (缓存),以下场景中不适合使用cache的是: 因为数据库中每条数据被访问的概率近似相等,且缓存空间一般较小不可能存入较多的数据。无法预测所需要查询的数据,如果将被最近访问数据放入缓存用处不大,故而增加缓存起不到很大的作用

信号量为-m,就是有m个进程在等待,一共m+1个进程,还有一个已经进入临界区

同一个进程中的两个线程,全局数据区和堆是相互可见的,栈并不是相互可见的。每个线程都有各自私有的程序计数器、寄存器和栈。

用户进程通过read系统调用读取一个磁盘文件中的数据,若该文件的数据不在内存,则该进程进入睡眠等待状态。请求read系统调用会导致CPU从用户态切换到核心态。

引入线程的系统中,一个进程中的各个线程可以共享其隶属进程的资源,包括一个进程的代码段、数据段及所拥有系统资源,如已打开的文件、I/O设备等。而为了保证线程的独立运行,每个线程都应该包含独立的堆栈和CPU寄存器状态,这些是不能共享的。

一、为什么引入线程阻塞机制?
为了解决对共享存储区的访问冲突,Java 引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个。为了解决这种情况下的访问控制问题,Java 引入了对阻塞机制的支持。
阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了。Java 提供了大量方法来支持阻塞,下面让我们逐一分析。
二、Java中实现线程阻塞的方法:
(1)线程睡眠:Thread.sleep (long millis)方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。sleep()平台移植性好。
(2)线程等待:Object类中的wait()方法,导致当前的线程等待,直到其他线程调用此对象的 notify() 唤醒方法。这个两个唤醒方法也是Object类中的方法,行为等价于调用 wait() 一样。wait() 和 notify() 方法:两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许 指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用.
(3)线程礼让,Thread.yield() 方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程.
(4)线程自闭,join()方法,等待其他线程终止。在当前线程中调用另一个线程的join()方法,则当前线程转入阻塞状态,直到另一个进程运行结束,当前线程再由阻塞转为就绪状态。
(5)suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume() 被调用,才能使得线程重新进入可执行状态。典型地,suspend() 和 resume() 被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用 resume() 使其恢复。Thread中suspend()和resume()两个方法在JDK1.5中已经废除,不再介绍。因为有死锁倾向。

属于同一进程的多个线程之间的切换不会引起进程的切换,只有属于不同进程的线程之间的切换才会引起进程的切换。

JCB 作业控制块:系统通过JCB感知作业的存在。JCB包括的主要内容有作业名、作业状态、资源要求、作业控制方式、作业类型以及作业优先权等。
PCB 进程控制块:由三部分组成 PCB、有关程序段和该程序段对其进行操作的数据结构集。 在Unix或类Unix系统中,进程是由进程控制块,进程执行的程序,进程执行时所用数据,进程运行使用的工作区组成。其中进程控制块是最重要的一部分。 进程控制块是用来描述进程的当前状态,本身特性的数据结构,是进程中组成的最关键部分,其中含有描述进程信息和控制信息,是进程的集中特性反映,是操作系统对进程具体进行识别和控制的依据。
PCB一般包括: 1.程序ID(PID、进程句柄):它是唯一的,一个进程都必须对应一个PID。PID一般是整型数字
2.特征信息:一般分系统进程、用户进程、或者内核进程等
3.进程状态:运行、就绪、阻塞,表示进程现的运行情况
4.优先级:表示获得CPU控制权的优先级大小
5.通信信息:进程之间的通信关系的反映,由于操作系统会提供通信信道
6.现场保护区:保护阻塞的进程用
7.资源需求、分配控制信息
8.进程实体信息,指明程序路径和名称,进程数据在物理内存还是在交换分区(分页)中
9.其他信息:工作单位,工作区,文件信息等

程序在装入内存之前,通常为逻辑地址形式,有时甚至在装入内存后,程序仍为相对地址形式。为了保证CPU执行程序指令时能正确访问存储单元,需要将用户程序中的逻辑地址转换为町由机器直接寻址的物理地址,这一过程称为地址映射。

并发是同时执行不过微观上是串行的,并行是同时执行,但是是不同的处理器执行,网上有个例子是说并发是一个馒头喂两个人,并行是两个馒头喂两个人。
并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。
并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。
并行性指两个或两个以上事件或活动在同一时刻发生。在多道程序环境下,并行性使多个程序同一时刻可在不同CPU上同时执行。

多道程序设计,是在内存中同时存放几道相互独立的程序,无论何时都有程序在执行,充分利用CPU。

内存就绪就是活动就绪,辅存就绪是静止就绪,静止就绪需要转换到活动就绪,才能在时间片到来而进入到运行状态。

文件是按块存储的,如果取更大的块,一次读取时会得到更多的数据,即磁盘吞吐率提高;但大块也会导致有时数据装不满,从而磁盘利用率下降 。

 设置Cache的目的,是解决CPU和主存之间的速度匹配问题
 设置Cache的理论基础,是程序访问的局部性原理
 Cache是介于***处理器和主存储器之间的高速小容量存储器,因此它不属于主存的一部分。•
 Cache的功能均由硬件实现,对程序员是透明的

1、并发性:指多个进程实体同存于内存中,且在一段时间内同时运行。并发性是进程的重要特征,同时也成为操作系统的重要特征。
2、动态性:进程的实质是进程实体的一次执行过程,因此,动态性是进程最基本的特征。
3、独立性:进程实体是一个独立运行、独立分配资源和独立接受调度的基本单位。
4、异步性:指进程按各自独立的、不可预知的速度向前推进,或者说实体按异步方式运行

页的划分是操作系统做的。
进程优先数是进程调度的重要依据,必须根据进程运行情况动态改变?错的
他还有静态优先级调度

A错,进程拥有独立的地址空间;
B错,主线程和子线程是并行关系的时候,并没有依赖关系。父进程和子进程中,子进程是父进程的一个副本,创建子进程后,子 进程会有自己的空间,然后把父进程的数据拷贝到子进程的空间里。运行时,谁先运行是不确定的,这由系统决定;

造成死锁的原因:
1.竞争不可抢占资源
2.竞争可消耗资源
3.进程推进顺序不当
死锁定义:
一组进程的每一个进程都在等待仅由该组进程中其他进程才能引发的事件
产生死锁的必要条件 :
1.互斥
2.请求和保持
3.不可抢占
4.循环等待
处理死锁:
1.预防死锁
2.避免思索
3.检测死锁
4.解除死锁

用c语言将一个1G字节的字符数组从头到尾全部设置为字‘A’,在一台典型的当代PC上,需1秒

Linux文件权限一共10位长度,分成四段,第三段表示的内容是(文件所有者所在组的权限)?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值