java实现:《操作系统实验三》模拟内存管理_操作系统学习百问(更新中)

更新链接:

https://mp.weixin.qq.com/s/hucEkWUpL3xC6xU7U5o74Q

dcdf13ed3dd34892da0ebe361bab5520.png

47.磁盘调度算法——LOOK算法

请看:磁盘调度算法——LOOK算法

45.磁盘调度算法——电梯算法

请看:磁盘调度算法——电梯算法

45.文字编码

请看:文字编码

44.字节序与大小端

请看:字节序与大小端

43. 浮点数

请看:浮点数

42. 我该使用哪些I/O函数?

请看:我该使用哪些I/O函数?(译)

41. 什么是抽象?

请看:什么是抽象?

40. 局部性

请看:局部性(译)

39. DRAM和SRAM存储器特性比较

DRAM(Dynamic RAM)和SRAM(Static RAM)存储器特性比较如下表所示。

每位晶

体管数

相对访问时间

持续

敏感

相对

花费

应用
SRAM61000×高速缓存存储器
DRAM110×

主存、帧

缓冲区

7c1f5c6684b64c0f53e7da1dd421d607.png

38. 操作系统管理硬件

请看:操作系统管理硬件

37. 高速缓存的重要性

请看:高速缓存的重要性

36. 原语的概念

请看:Primitive--原语

35. 哲学家进餐问题

请看:哲学家进餐问题

34. 理发师问题

请看:理发师问题

33. Linux标准文件

请看:Linux标准文件

32. 处理机与处理器

请看:处理机与处理器

31. 自由软件许可证

自由软件许可证介绍请看:

软件许可证

30. 什么是计算思维

请看:计算思维

29. 什么是计算机系统能力?

请看:计算机系统能力

28. 进程、线程和协程概念。

进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。

线程:线程是指进程内的一个执行单元,也是进程内的可调度实体。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

协程:协程是一种用户态的轻量级线程,协程的调度完全由用户控制。从技术的角度来说,“协程就是你可以暂停执行的函数”。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

详细内容请看: 进程、线程与协程

27. 我们为什么在文本界面环境下做实验呢?

在图形界面中使用计算机太方便太简单了,我们不需要思考即可进行操作,使得很多人不明白什么是当前目录,什么是相对路径、绝对路径。一个文件存储的位置如何表示都不知道。因此,我们强调必须在文本界面下进行实验,观察、体会操作系统是如何工作的,你输入的每条命令系统是如何是处理的,表现的结果是什么,......多思考,慢慢地你就会学到很多知识。

26. 用软件解决进程互斥方法的演变

人们提出很多种解决进程互斥的方法,有用软件解决的方案,也有用硬件的解决方案。

关于用软件的方法实现进程之间的互斥请看:用软件解决进程互斥方法的演变

25. 读者与写者问题

读者与写者问题(The readers-writers problem)是指多个进程对一个共享资源进行读写操作的问题。在两组并发执行的进程中,一组进程只要求读数据文件内容,称为读者;另一组进程要求修改数据文件内容,称为写者。 同步算法描述,请看:读者与写者问题

24. 下棋问题

有n个(n为偶数)椅子供人下棋,一盘围棋由两个人来下,下棋者来时需要看一看有没有空椅子。一个服务员,当有两个人到来且都申请到空椅子时,才允许两个人下棋。一个裁判员,当两个下棋者下完棋后,为两个人裁定胜负。两个人下完棋后,交还椅子离去。使用PV操作实现上述过程。 同步算法描述,请看:答疑(进程同步、互斥、死锁)之一

23. 多个理发师问题

有m个理发师,n个理发椅和k把等候理发的顾客坐的椅子。如果没有顾客,理发师在休息室;当一个顾客到来时,必须唤醒理发师,进行理发;如果理发师正在理发,又有顾客来到,则如果有空椅子可坐,他就坐下来等,如果没有空椅子,他就离开。为理发师和顾客各编写一段程序描述他们的行为。

同步算法描述,请看:答疑(进程同步、互斥、死锁)之二

22. 并发与并行(Concurrency and Parallelism)

术语“并发”是一个通用的概念,指一个同时具有多个活动的系统,而术语“并行”指的是用并发来使一个系统运行得更快。并行可以在计算机系统的多个抽象层次上发挥作用,我们按照系统层次结构从高到低三个层次顺序介绍。

详细内容请看:并发与并行(译) 

20-21. 请看: 操作系统中的几个概念

20: 1. CPU burst 和IO burst

21: 2. CPU-bound和I/O bound

22: 3. CPU Scheduler和CPU Dispatcher

15-19. 请看: 操作系统问答

15. 问:操作系统与计算机硬件之间是什么关系?

16. 问:如果一台计算机没有安装操作系统,那么,用户在与该台计算机交互时会有哪些不便?

17. 问:作业和进程有什么区别?

18. 问:多道程序设计的优点是什么?

19. 问:什么是进程调度程序?一个好的进程调度程序有哪些特征?

5-14. 请看: 软件开发人员需要记住的10个操作系统概念(译)

5:1.进程和进程管理

6:2.线程和并发

7:3.调度

8:4.内存管理

9:5. 进程间通信

10:6. I/O管理

11:7.虚拟化

12:8.分布式文件系统

13:9.分布式共享内存

14:10.云计算

4. Android操作系统 

Android是基于Linux内核的系统。Android和Linux系统的核心系统服务都依赖于Linux内核,如安全、内核管理、进程管理、网络堆栈、驱动模型等。Linux内核也作为两者的硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层应用开发提供统一的服务。

下面两个图很直观的展示了Android系统和Linux发行版系统(Ubuntu/Fedora/centos)之间的区别和联系。

1649c848b4af1feb163cee12fcf61ca8.png

1e72eb832b316d56a13396ee17767c91.png

Android本质上是一个基于Linux内核上面运行的Java虚拟机,底层用的是极度精简后的Linux内核(系统),用Linux系统来启动Android的Dalvik/ART虚拟机。 Dalvik是Android的Java虚拟机(JVM),由于效率等问题在Android 4.4以后改为Android Run Time(ART)。Dalvik和ART都是用C/C++开发的,在其上运行Java(具有可移植性的一种与平台无关的编程语言)开发出来的APP。也就是说, Android是借助了Linux内核作为系统的基础,配合自己的Andriod基础二进制函数库和一些开源软件作为基础功能支持,跑上自己的Dalvik/ART虚拟机,实际看到的Android界面,其实是Dalvik/ART虚拟机里面运行的Java程序。 Android=Linux内核+功能函数库+Dalvik/ART虚拟机+Java程序。

3. 作业管理与进程调度

作业管理:内存的空间是有限的,意味着一次性载入到内存的程序数量也是有限的,那么怎样从备选作业里选择合适的作业加载进内存就是一个问题,作业管理就负责解决这个问题。如今,由于内存容量的不断增大,很少出现有作业需要在后台排队的现象。因此,作业管理的作用逐渐失去往日的重要角色。

内存管理:选择了作业,就需要为作业分配空间,空闲区的哪一部分空间划分给作业就是内存管理需要解决的事情。 

进程调度:进程,就是进行中的程序,一般我们把加载进内存的作业称为进程,以和未加载的作业区分。进程调度,就是当需要进行进程切换时,通过某种算法从进程的就绪队列中取出合适的进程,获得CPU 的执行。

2. Posix标准

20世纪60年代是大型、复杂操作系统盛行的年代,比如IBM的OS/360和Honeywell的Multics系统。OS/360是历史上最成功的软件项目之一,而 Multics虽然持续存在了多年,却从来没有被广泛应用过。贝尔实验室曾经是Multics项目的最初参与者,但是因为考虑到该项目的复杂性和缺乏进展而于1969年退出。鉴于Mutics项目不愉快的经历,一群贝尔实验室的研究人员Ken Thompson、 Dennis Ritchie、 Doug Mcllroy和 Joe Ossanna,从1969年开始在DEC PDP-7计算机上完全用机器语言编写了一个简单得多的操作系统。这个新系统中的很多思想,比如层次文件系统、作为用户级进程的 shell概念,都是来自于 Multics,只不过在一个更小、更简单的程序包里实现。1970年,Brian Kernighan给新系统命名为“Unix”,这也是一个双关语,暗指“Multics”的复杂性。1973年用C重新编写其内核,1974年,Unix开始正式对外发布。 贝尔实验室以慷慨的条件向学校提供源代码,所以Unix在大专院校里获得了很多支持并得以持续发展。最有影响的工作发生在20世纪70年代晚期到80年代早期,在美国加州大学伯克利分校,研究人员在一系列发布版本中增加了虚拟内存和Internet协议,称为Unix4.xBSD(Berkeley Software Distribution)。与此同时,贝尔实验室也在发布自己的版本,称为System V Unix。其他厂商的版本,比如Sun Microsystems的Solaris系统,则是从这些原始的BSD和System V版本中衍生而来。 20世纪80年代中期,Unix厂商试图通过加入新的、往往不兼容的特性来使它们的程序与众不同,麻烦也就随之而来了。为了阻止这种趋势,IEEE(电气和电子工程师协会)开始努力标准化Unix的开发,后来由 Richard Stallman命名为“POSIX”(Portable Operating System Interface)。结果就得到了一系列的标准,称作Posix标准。这套标准涵盖了很多方面,比如Unix系统调用的C语言接口、shell程序和工具、线程及网络编程。Posix标准促使Unix版本之间的差异逐步消失。

1. 学习操作系统无用吗?

学习操作系统原理的目的并不是让你去写一个操作系统,而是让你更好地理解程序运行的平台,更好地编写程序。比如,熟悉掌握P/V操作的人,绝对比没学过这些东西的人更容易掌握特定系统提供的相关API函数。 但在现实中还是有人说学习操作系统无用,这大概是因为他没有用到。对于工程开发者来说,如果对偏底层的操作系统知识毫无了解,写程序就会浮于表面。做个不恰当的比喻,如果把编程比喻成武功,那么编程语言的语法、软件的使用技巧就是外功,而计算机原理、操作系统、设计模式等知识就是内功心法。只懂外功不会内功的人虽然能胜任部分工作,比如编写业务逻辑代码或从事一些比较基础的开发工作,但一些涉及核心功能开发等都得由懂内功的人来完成。 总之,认为操作系统等原理知识没什么用,一直停留在写业务代码层面的人,拿一份不错的工资可能是没问题的,只是后续的职业发展会有瓶颈,很容易被替代。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验一 进程调度 编写并调试一个模拟的进程调度程序,采用“短进程优先”调度算法对五个进程进行调度。以加深对进程的概念及进程调度算法的理解. 下面是采用动态优先数的调度程序,可作参考。  例题: 设计一个有 N个进程共行的进程调度程序。   进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。   每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。   进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。   进程的运行时间以时间片为单位进行计算。   每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。   就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。   如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。   每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。实验二 作业调度 一、实验目的:用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二、实验内容: 1.写并调试一个单道处理系统的作业等待模拟程序。 2.作业等待算法:分别采用先来先服务(FCFS)、响应比高者优先(HRN)的调度算法。 3.由于在单道批处理系统,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。 4.每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。 5.对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。 三、思考:比较各种算法的优缺点。 实验三 动态分区分配方式的模拟 1、实验目的:了解动态分区分配方式的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解 2、实验内容: (1)用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程和回收过程。其,空闲分区通过空闲分区链(表)来管理;在进行内存分配时,系统优先使用空闲区低端的空间。 (2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列: •作业1申请130KB •作业2申请60KB •作业3申请100KB •作业2释放60KB •作业4申请200KB •作业3释放100KB •作业1释放130KB •作业5申请140KB •作业6申请60KB •作业7申请50KB •作业8申请60KB 请分别采用首次适应算法和最佳适应算法进行内存的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。 3、思考:讨论各种分配算法的特点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值