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

2024-02-11 16:20

本文主要是介绍“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. 需求和市场竞争:存储技术的价格也受到市场需求和竞争的影响。如果某种存储技术需求量大且市场竞争激烈,厂商可能降低价格以吸引更多消费者。相反,如果某种存储技术需求较小或垄断市场,价格可能较高。

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

 

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

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

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

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

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

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

 

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

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

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

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

这篇关于“64KB内存空间即可以满足所有人的内存需要。”一比尔·盖茨的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/700246

相关文章

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都会产生一个栈帧导致了创建的栈帧过多,而导致内存溢出(StackOverflowError)。 示例代码: 运行结果: 栈帧过大导致栈内存

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们