“64KB内存空间即可以满足所有人的内存需要。”一比尔·盖茨

目录

7.有人提出另一种使用测试与设置来实现锁的方法如下: lock(){ while(test_and_set(guard)){ } if(value==FREE){ value==BUSY; }else{ add thread to queue of threads waiting for this lock; switch to next runnable thread; } guard=0; } unlock(){ value=FREE; if(any thread is waiting for this lock){ move waiting thread from waiting queue to ready queue; value=BUSY; } } 这种实现的特点是在unlock里不对guard进行测试与设置,而是直接对value进行操作。请问:这种实现方式 能否正确运行?为什么?

介绍一下Windows NT操作系统 

为什么,缓存的特点是低容量(相对主存来说)、高速度、高价格呢? 

为什么存储技术会有昂贵之分呢?


7.有人提出另一种使用测试与设置来实现锁的方法如下: lock(){ while(test_and_set(guard)){ } if(value==FREE){ value==BUSY; }else{ add thread to queue of threads waiting for this lock; switch to next runnable thread; } guard=0; } unlock(){ value=FREE; if(any thread is waiting for this lock){ move waiting thread from waiting queue to ready queue; value=BUSY; } } 这种实现的特点是在unlock里不对guard进行测试与设置,而是直接对value进行操作。请问:这种实现方式 能否正确运行?为什么?

这种使用测试与设置来实现锁的方法是不正确的,无法正确运行。主要问题出现在unlock操作中对value的直接操作。

让我们来详细分析一下这种实现方式:

在lock操作中,使用测试与设置指令(test_and_set)来尝试获取锁,如果guard的值为1,表示锁已经被其他线程持有,当前线程会进入循环等待,直到guard的值为0,才能继续执行后续操作。如果value的值为FREE,表示锁可用,当前线程将将value设置为BUSY,并继续执行。如果value的值不为FREE,表示锁已被其他线程占用,当前线程将加入等待该锁的线程队列,并切换到下一个可运行的线程。

在unlock操作中,首先将value设置为FREE,表示释放锁。然后检查是否有等待该锁的线程,如果有,则将其中一个线程从等待队列移到就绪队列,并将value设置为BUSY,以使该线程能够继续执行。

然而,这种实现方式存在一个关键问题:在unlock操作中直接对value进行操作,并没有采取任何同步措施。这会导致竞态条件的发生,即多个线程同时进入unlock操作,可能会导致数据不一致或者错误的操作。

考虑这样一种情况:线程A和线程B都持有相同的锁,此时线程A调用unlock操作并将value设置为FREE,然后线程B也调用unlock操作,由于没有同步保护,线程B可能会在线程A修改value之前将value设置为BUSY,这样就导致了错误的状态。

因此,为了正确实现锁,必须在对共享数据进行操作时采取适当的同步机制,以确保操作的原子性和一致性。常见的方式是使用原子指令或者使用更高级别的同步原语,如互斥锁或信号量。

 

 

 ●程序的地址独立性 ●地址空间的保护 ●内存空量的巨量或无限扩大 ●内存访问速度的大幅度提升

操作系统为实现虚拟内存而使用的“原料”却很简单:一点点缓存,一些主存和便宜的磁盘;其采用的机制也 简单至极:动态地址翻译

微软(Microsoft)作为一家全球化的软件公司,可以说是众人皆知,家喻户晓。也许很多人不知道,在20世 纪90年代初,微软的处境并不好。事实上,由于微软推出的Windows 3.0系列、Windows 95、Windows 98皆 是在DOS外面包裹的一层图形界面,而不是真正的操作系统,导致了忠于UNIX及MacOS的人士对上述 Windows“操作系统”的猛烈抨击。那个时候,在很多相关的学术及工业会议上,上台作报告的人总会或多或 少地对微软进行一番攻击。工业界及学术界人士的共识就是:微软研究的根本就不是操作系统,说Windows 是操作系统那是对操作系统的侮辱。

介绍一下Windows NT操作系统 

Windows NT(New Technology)是微软开发的一系列基于32位和64位操作系统内核的操作系统。Windows NT系列包括多个版本,如Windows NT 3.1、Windows NT 4.0、Windows 2000、Windows XP、Windows Vista、Windows 7、Windows 8、Windows 10等。

Windows NT操作系统具有以下特点:

  1. 内核稳定性:Windows NT操作系统采用了稳定的内核设计,提供了可靠的系统稳定性和容错能力。它采用了分层的体系结构,包括硬件抽象层(HAL)、内核、执行管理器等组件,以提供高度可靠的操作环境。

  2. 多用户和多任务支持:Windows NT支持多用户和多任务操作,可以同时运行多个应用程序和用户会话。每个用户可以拥有自己的登录账户和个性化的工作环境,而且用户之间相互隔离,互不干扰。

  3. 安全性:Windows NT注重系统的安全性和权限管理。它引入了访问控制列表(ACL)和用户权限模型,可以细粒度地管理文件、文件夹和系统资源的访问权限。

  4. 网络功能:Windows NT具备强大的网络功能,支持TCP/IP协议和其他网络协议,可以方便地连接到局域网或互联网。它提供了网络共享、远程登录和网络文件传输等功能。

  5. 兼容性:Windows NT向下兼容以前的Windows操作系统,可以运行许多Windows应用程序和驱动程序。它还支持多种硬件架构和设备驱动程序。

  6. 可扩展性:Windows NT允许用户通过安装和配置组件来扩展系统功能。它支持插件式架构和模块化设计,可以根据需要添加新的功能和服务。

  7. 用户界面:Windows NT提供了直观友好的图形用户界面(GUI),包括窗口、菜单、图标和鼠标等交互元素,使用户可以轻松操作和管理系统。

总体而言,Windows NT操作系统是一个强大而稳定的操作系统,广泛用于个人计算机、服务器和嵌入式系统等领域。它提供了丰富的功能和工具,满足了不同用户的需求,并持续演进和改进以适应不断变化的计算环境。

 

为什么,缓存的特点是低容量(相对主存来说)、高速度、高价格呢? 

缓存的特点是低容量、高速度和高价格,这是由其设计目标和实际应用需求所决定的。

  1. 高速度:缓存的主要目的是提高数据的访问速度。因为缓存位于CPU和主存之间,CPU可以更快地访问缓存中的数据,而不需要等待主存的较慢访问速度。缓存采用了更快的存储介质(如SRAM),以提供更短的访问时间和更高的数据传输速率。

  2. 低容量:缓存的容量相对主存来说较小。这是因为较大容量的缓存需要更多的存储空间和更高的成本,而且较大的缓存也会增加访问延迟。为了保持较高的速度和较低的成本,缓存容量通常被限制在相对较小的范围内。

  3. 高价格:由于缓存采用了更快速度和更昂贵的存储技术(如SRAM),相比于主存,缓存的成本要高得多。较高的价格限制了缓存容量的增加,同时也对计算机系统的整体成本产生影响。

综上所述,缓存的设计目标是通过提供较小但更快的存储空间,以加快CPU对数据的访问速度。高速度和较小的容量使得缓存能够更有效地提供CPU所需的数据,但同时也限制了其容量和成本。设计者需要在速度、容量和成本之间做出权衡,以满足系统的性能需求和经济可行性。

为什么存储技术会有昂贵之分呢?

存储技术之所以会有昂贵和廉价之分,是由于以下几个因素造成的:

  1. 物理特性:不同类型的存储介质具有不同的物理特性和制造成本。例如,固态硬盘(SSD)使用闪存芯片作为存储介质,而机械硬盘(HDD)使用磁盘和读写头。闪存芯片相对较昂贵,而磁盘和读写头的制造成本较低。

  2. 生产规模和供需关系:存储技术的成本也与供需关系和生产规模有关。当某种存储技术的需求量较大且供应相对稀缺时,价格通常会较高。另一方面,当存储技术得到广泛应用且生产规模扩大时,成本可能会下降。

  3. 制造工艺和研发成本:存储技术的制造工艺和研发成本对其价格产生影响。开发新型存储技术或改进现有技术的成本往往较高,并可能导致昂贵的产品定价。

  4. 需求和市场竞争:存储技术的价格也受到市场需求和竞争的影响。如果某种存储技术需求量大且市场竞争激烈,厂商可能降低价格以吸引更多消费者。相反,如果某种存储技术需求较小或垄断市场,价格可能较高。

总的来说,存储技术的昂贵与廉价之分取决于物理特性、供需关系、生产规模、制造工艺和研发成本以及市场竞争等多种因素。这些因素共同决定了存储技术的定价,并使得不同存储技术的成本存在差异。

 

一个东西的价值在于能否满足我们的渴望和需要。如果能,这个东西就有价值。那么内存管理就 是要提供一个有价值的虚幻。用术语来说就是抽象。那么内存管理要提供哪些抽象呢?或者说,内存管理要 达到什么目标呢?

那还有没有别的目标呢?我们看一下程序指令执行的过程。程序指令在执行前加载到内存,然后从内存中一 条条指令读出,然后执行(从硬件层来看,指令的“读取-执行”循环是计算机的基本操作)。每条指令在执 行时需要读取操作数和写入运算结果,要读取操作数,就需要给出操作数所在的内存地址,这个地址不能是 物理主存地址。这是因为该程序在何种硬件配置的机器上运行并不能事先确定,操作系统自然不可能对症下 药地发出对应于某台机器的物理主存地址。因此,指令里面的地址是程序空间(虚拟空间)的虚拟地址(程 序地址)。即程序发出的地址与具体机器的物理主存地址是独立的。这是内存管理要达到的另外一个目标。

综上所述,内存管理要达到如下两个目标:

●地址保护:一个程序不能访问另一个程序地址空间。

●地址独立:程序发出的地址应与物理主存地址无关。

这两个目标就是衡量一个内存管理系统是否完善的标准。它是所有内存管理系统必须提供的基本抽象。当 然,不同的内存管理系统在此二者之上还提供了许多其他抽象。本书将在后面论及这些抽象时逐一说明。

 

这句话的意思是指在现实生活中,有些人的渴望和期望无法得到满足,导致他们感到空虚和不满。相比之下,虚拟世界中的游戏(如"第二生命")给予了玩家满足这些渴望的机会。在游戏中,玩家可以实现他们在现实生活中无法实现的理想,获得金钱、地位、声望等虚拟的成就和满足感。

然而,这种虚拟的满足感并不能真正填补现实生活中的空虚感。尽管游戏中的成就和满足感可以暂时地弥补某些现实中的不足,但它们并不真实,无法在现实世界中产生实际的影响。因此,尽管在游戏中可以追求和获得一些虚拟的满足,但在现实生活中仍然存在无法满足的渴望,从而导致感到空虚。

这句话的意思是指出了虚拟世界和现实生活之间的差异,以及在现实生活中无法满足渴望和期望所带来的空虚感。它提醒我们虚拟世界的满足感并不能完全替代现实生活中真实的成就和满足感。

今天琢磨操作系统的虚拟内存的时候,突然联想到游戏,等效过去想想,其实感觉玩游戏不会让我们的内心更加丰富与富足,怎么说呢,就是你在游戏中可以声色犬马,纵横四海,应有尽有,但是这样的虚拟的操作与成就,并不能直接地映射到你的现实生活的逆转和成功,如此,还正因为你无法脱离现实生活,所以当你从游戏世界回到现实生活的时候,现实可能会让你更加撕裂,因为这种落差其实加剧了你内心的不平衡,所以恐怕伤心的、刚失败的、空虚的、不快乐、压力大的人不太适合玩游戏。游戏或许可以给我们带来一时的热血澎湃,但是抽离回来,绵延的可能是加剧的痛苦与空虚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值