【计算机科学速成课】笔记三——操作系统

文章目录

    • 18.操作系统
      • 问题引出——
      • 批处理
      • 设备驱动程序
      • 多任务处理
      • 虚拟内存
      • 内存保护
      • Unix

18.操作系统

在这里插入图片描述

问题引出——

Computers in the 1940s and early 50s ran one program at a time.
1940,1950 年代的电脑,每次只能运行一个程序

A programmer would write one at their desk, for example, on punch cards.
程序员在打孔纸卡上写程序

Then, they’d carry it to a room containing a room-sized computer,
然后拿到一个计算机房间, 交给操作员

and hand it to a dedicated computer operator.
That person would then feed the program into the computer when it was next available.
等计算机空下来了,操作员会把程序放入

The computer would run it, spit out some output, and halt.
然后运行,输出结果,停机
在这里插入图片描述

This very manual process worked OK back when computers were slow,
以前计算机慢,这种手动做法可以接受

and running a program often took hours, days or even weeks.
运行一个程序通常要几小时,几天甚至几周

But, as we discussed last episode,
但上集说过,计算机越来越快,越来越快

computers became faster… and faster… and faster

exponentially so!
指数级增长!

Pretty soon, having humans run around and inserting programs into readers
很快,放程序的时间 比程序运行时间还长

在这里插入图片描述

was taking longer than running the actual programs themselves.
We needed a way for computers to operate themselves,
我们需要一种方式 让计算机自动运作

and so, operating systems were born.
于是"操作系统"诞生了

Operating systems , or OS for short, are just programs.
操作系统,简称 OS,其实也是程序

But, special privileges on the hardware let them run and manage other programs.
但它有操作硬件的特殊权限 \N 可以运行和管理其它程序

They’re typically the first one to start when a computer is turned on,
操作系统一般是开机第一个启动的程序

and all subsequent programs are launched by the OS.
其他所有程序 都由操作系统启动

They got their start in the 1950s,
操作系统开始于 1950 年代 \N 那时计算机开始变得更强大更流行

批处理

as computers became more widespread and more powerful.
The very first OS augmented the mundane, manual task of loading programs by hand.
第一个操作系统 加强了程序加载方式

Instead of being given one program at a time,
之前只能一次给一个程序,现在可以一次多个
computers could be given batches.

When the computer was done with one,
当计算机运行完一个程序,会自动运行下一个程序
it would automatically and near-instantly start the next.
There was no downtime while someone scurried around an office to find the next program to run.
这样就不会浪费时间,找下一个程序的纸卡

This was called batch processing .
这叫 批处理

设备驱动程序

While computers got faster, they also got cheaper.
电脑变得更快更便宜,开始在出现在世界各地

So, they were popping up all over the world,
especially in universities and government offices.
特别是大学和政府办公室

Soon, people started sharing software.
很快,人们开始分享软件,但有一个问题

But there was a problem
In the era of one-off computers, like the Harvard Mark 1 or ENIAC,
在哈佛1号和 ENIAC 那个时代,计算都是一次性的

programmers only had to write code for that one single machine.
程序员只需要给那"一台"机器写代码

The processor, punch card readers, and printers were known and unchanging.
处理器,读卡器,打印机都是已知的
在这里插入图片描述

But as computers became more widespread,
但随着电脑越来越普遍,计算机配置并不总是相同的

their configurations were not always identical,
like computers might have the same CPU, but not the same printer.
比如计算机可能有相同 CPU,但不同的打印机

This was a huge pain for programmers.
这对程序员很痛苦

Not only did they have to worry about writing their program,
不仅要担心写程序,还要担心程序怎么和不同型号打印机交互

but also how to interface with each and every model of printer,
and all devices connected to a computer, what are called peripherals.
以及计算机连着的其他设备,这些统称"外部设备"

Interfacing with early peripherals was very low level,
和早期的外部设备交互,是非常底层的

requiring programmers to know intimate hardware details about each device.
程序员要了解设备的硬件细节

On top of that, programmers rarely had access to every model of a peripheral to test their code on.
加重问题的是,程序员很少能拿到所有型号的设备来测代码

So, they had to write code as best they could, often just by reading manuals,
所以一般是阅读手册来写代码,祈祷能正常运行

and hope it worked when shared.

Things weren’t exactly plug-and-play
现在是"即插即用",以前是"祈祷能用"

back then more plug-and-pray.

This was clearly terrible,
这很糟糕,所以为了程序员写软件更容易

so to make it easier for programmers,

Operating Systems stepped in as intermediaries between software programs and hardware peripherals.
操作系统充当软件和硬件之间的媒介

More specifically, they provided a software abstraction, through APIs,
更具体地说,操作系统提供 API 来抽象硬件,叫"设备驱动程序"

called device drivers .
These allow programmers to talk to common input and output hardware,
程序员可以用标准化机制 和输入输出硬件(I/O)交互

or I/O for short, using standardized mechanisms.

For example, programmers could call a function like “print highscore”,
比如,程序员只需调用 print(highscore)

and the OS would do the heavy lifting to get it onto paper.
操作系统会处理 输到纸上的具体细节

多任务处理

By the end of the 1950s, computers had gotten so fast,
到 1950 年代尾声,电脑已经非常快了

they were often idle waiting for slow mechanical things, like printers and punch card readers.
处理器经常闲着,等待慢的机械设备(比如打印机和读卡器)

While programs were blocked on I/O,
程序阻塞在 I/O 上

the expensive processor was just chillin’… not like a villain
而昂贵的处理器则在度假,就是放松啥也不做

you know, just relaxing.
In the late 50’s, the University of Manchester, in the UK,
50年代后期,英国曼彻斯特大学 \N 开始研发世界上第一台超级计算机,Atlas

started work on a supercomputer called Atlas, one of the first in the world.
They knew it was going to be wicked fast,
他们知道机器会超级快,所以需要一种方式来最大限度的利用它

so they needed a way to make maximal use of the expensive machine.

Their solution was a program called the Atlas Supervisor, finished in 1962.
他们的解决方案是一个程序叫 Atlas Supervisor \N 于1962年完成

This operating system not only loaded programs automatically, like earlier batch systems,
这个操作系统 \N不仅像更早期的批处理系统那样,能自动加载程序

but could also run several at the same time on its single CPU.
还能在单个 CPU 上同时运行几个程序

It did this through clever scheduling.
它通过调度来做到这一点

Let’s say we have a game program running on Atlas,
假设 Atlas 上有一个游戏在运行

and we call the function “print(highscore)”
并且我们调用一个函数 print(highscore)

which instructs Atlas to print the value of a variable named “highscore”
它让 Atlas 打印一个叫 highscore 的变量值

onto paper to show our friends that we’re the ultimate champion of virtual tiddlywinks.
让朋友知道 我是最高分冠军

That function call is going to take a while, the equivalent of thousands of clock cycles,
print 函数运行需要一点时间,大概上千个时钟周期

because mechanical printers are slow in comparison to electronic CPUs.
但因为打印机比 CPU 慢,与其等着它完成操作

So instead of waiting for the I/O to finish,
Atlas instead puts our program to sleep,
Atlas 会把程序休眠,运行另一个程序

then selects and runs another program that’s waiting and ready to run.
Eventually, the printer will report back to Atlas that it finished printing the value of “highscore”.
最终, 打印机会告诉 Atlas, 打印已完成

Atlas then marks our program as ready to go,
Atlas 会把程序标记成可继续运行

and at some point, it will be scheduled to run again on the CPU,
之后在某时刻会安排给 CPU 运行

and continue onto the next line of code following the print statement.
并继续 print 语句之后的下一行代码

In this way, Atlas could have one program running calculations on the CPU,
这样, Atlas 可以在 CPU 上运行一个程序

while another was printing out data,
同时另一个程序在打印数据

and yet another reading in data from a punch tape.
同时另一个程序读数据

Atlas’ engineers doubled down on this idea,
Atlas 的工程师做的还要多,配了4台纸带读取器,4台纸带打孔机

and outfitted their computer with 4 paper tape readers, 4 paper tape punches,
and up to 8 magnetic tape drives.
多达8个磁带驱动器

This allowed many programs to be in progress all at once,
使多个程序可以同时运行,在单个 CPU 上共享时间

sharing time on a single CPU.
This ability, enabled by the Operating System, is called
操作系统的这种能力叫**“多任务处理”**
multitasking.

虚拟内存

There’s one big catch to having many programs running simultaneously on a single computer, though.
同时运行多个程序有个问题

Each one is going to need some memory,
每个程序都会占一些内存 \N 当切换到另一个程序时,我们不能丢失数据

and we can’t lose that program’s data when we switch to another program.
The solution is to allocate each program its own block of memory.
解决办法是 给每个程序分配专属内存块

So, for example, let’s say a computer has 10,000 memory locations in total.
举个例子,假设计算机一共有 10000 个内存位置

Program A might get allocated memory addresses 0 through 999,
程序 A 分配到内存地址 0 到 999

and Program B might get 1000 through 1999, and so on.
而程序 B 分配到内存地址 1000 到 1999,以此类推
在这里插入图片描述

If a program asks for more memory,
如果一个程序请求更多内存,操作系统会决定是否同意

the operating system decides if it can grant that request,
and if so, what memory block to allocate next.
如果同意,分配哪些内存块

This flexibility is great, but introduces a quirk.
这种灵活性很好,但带来一个奇怪的后果

It means that Program A could end up being allocated non-sequential blocks of memory,
程序 A 可能会分配到非连续的内存块

in say addresses 0 through 999, and 2000 through 2999.
比如内存地址 0 到 999,以及 2000 到 2999

And this is just a simple example
这只是个简单例子

  • a real program might be allocated dozens of blocks scattered all over memory.
    真正的程序可能会分配到内存中数十个地方

As you might imagine,
你可能想到了,这对程序员来说很难跟踪

this would get really confusing for programmers to keep track of.
Maybe there’s a long list of sales data in memory that
也许内存里有一长串销售额,每天下班后要算销售总额

a program has to total up at the end of the day,
but this list is stored across a bunch of different blocks of memory.
但列表 存在一堆不连续的内存块里

To hide this complexity, Operating Systems virtualize memory locations.
为了隐藏这种复杂性,操作系统会把内存地址进行 “虚拟化”

With Virtual Memory, programs can assume their memory always starts at address 0,
这叫 “虚拟内存”,程序可以假定内存总是从地址0开始

keeping things simple and consistent.
简单又一致

However, the actual, physical location in computer memory
而实际物理位置 被操作系统隐藏和抽象了

is hidden and abstracted by the operating system.
而实际物理位置 被操作系统隐藏和抽象了

Just a new level of abstraction.
一层新的抽象

Let’s take our example Program B,
用程序 B 来举例 \N 它被分配了内存地址 1000 到 1999

which has been allocated a block of memory from address 1000 to 1999.
As far as Program B can tell, this appears to be a block from 0 to 999.
对程序 B 而言,它看到的地址是 0 到 999
在这里插入图片描述
虚拟内存可以相同的

The OS and CPU handle the virtual-to-physical memory remapping automatically.
操作系统会自动处理 \N 虚拟内存和物理内存之间的映射

So, if Program B requests memory location 42,
如果程序 B 要地址 42,实际上是物理地址 1042

it really ends up reading address 1042.
如果程序 B 要地址 42,实际上是物理地址 1042

This virtualization of memory addresses is even more useful for Program A,
这种内存地址的虚拟化 对程序 A 甚至更有用

which in our example, has been allocated two blocks of memory
在例子中,A 被分配了两块隔开的内存

that are separated from one another.
This too is invisible to Program A.
程序 A 不知道这点.

As far as it can tell, it’s been allocated a continuous block of 2000 addresses.
以 A 的视角,它有 2000 个连续地址

When Program A reads memory address 999,
当程序 A 读内存地址 999 时 \N 会刚好映射到物理内存地址 999

that does coincidentally map to physical memory address 999.
But if Program A reads the very next value in memory, at address 1000,
但如果程序 A 读下一个地址 1000

that gets mapped behind the scenes to physical memory address 2000.
会映射到物理地址 2000

This mechanism allows programs to have flexible memory sizes,
这种机制使程序的内存大小可以灵活增减 \N 叫"动态内存分配"

called dynamic memory allocation,
that appear to be continuous to them.
对程序来说,内存看起来是连续的.

It simplifies everything and offers tremendous flexibility to the Operating System
它简化了一切,为操作系统同时运行多个程序 \N 提供了极大的灵活性

in running multiple programs simultaneously.
Another upside of allocating each program its own memory,
给程序分配专用的内存范围,\N 另一个好处是 这样隔离起来会更好

内存保护

is that they’re better isolated from one another.
给程序分配专用的内存范围,\N 另一个好处是 这样隔离起来会更好

So, if a buggy program goes awry, and starts writing gobbledygook,
如果一个程序出错,开始写乱七八糟的数据

it can only trash its own memory, not that of other programs.
它只能捣乱自己的内存,不会影响到其它程序.

This feature is called Memory Protection.
这叫 “内存保护

This is also really useful in protecting against malicious software, like viruses.
防止恶意软件(如病毒)也很有用

For example, we generally don’t want other programs to have the ability
例如,我们不希望其他程序有能力 \N 读或改邮件程序的内存

to read or modify the memory of, let say, our email,
with that kind of access,
如果有这种权限 \N 恶意软件可能以你的名义发邮件,甚至窃取个人信息
malware could send emails on your behalf and maybe steal personal information.
Not good!
一点都不好!

Atlas had both virtual and protected memory.
Atlas 既有"虚拟内存"也有"内存保护"

It was the first computer and OS to support these features!
是第一台支持这些功能的计算机和操作系统!

By the 1970s, computers were sufficiently fast and cheap.
到 1970 年代,计算机足够快且便宜

Institutions like a university could buy a computer and let students use it.
大学会买电脑让学生用

It was not only fast enough to run several programs at once,
计算机不仅能同时运行多个程序,还能让多用户能同时访问
but also give several users simultaneous, interactive access.
This was done through a terminal,
多个用户用"终端"来访问计算机

which is a keyboard and screen that connects to a big computer,
"终端"只是键盘+屏幕,连到主计算机 \N 终端本身没有处理能力

but doesn’t contain any processing power itself.
A refrigerator-sized computer might have 50 terminals connected to it,
冰箱大小的计算机可能有50个终端,能让50个用户使用

allowing up to 50 users.
Now operating systems had to handle not just multiple programs,
这时操作系统不但要处理多个程序,还要处理多个用户

but also multiple users.
So that no one person could gobble up all of a computer’s resources,
为了确保其中一个人 不会占满计算机资源

operating systems were developed that offered time-sharing.
开发了 分时操作系统

With time-sharing each individual user was only allowed to utilize
意思是 每个用户只能用一小部分处理器,内存等

a small fraction of the computer’s processor, memory, and so on.
意思是 每个用户只能用一小部分处理器,内存等

Because computers are so fast,
因为电脑很快 \N 即使拿到 1/50 的资源也足以完成许多任务

even getting just 1/50th of its resources was enough for individuals to complete many tasks.
因为电脑很快 \N 即使拿到 1/50 的资源也足以完成许多任务

The most influential of early time-sharing Operating Systems was
早期分时操作系统中,最有影响力的是 \N Multics(多任务信息与计算系统)

Multics, or Multiplexed Information and Computing Service,
早期分时操作系统中,最有影响力的是 \N Multics(多任务信息与计算系统)

released in 1969.
于 1969 年发布

Unix

Multics was the first major operating system designed to be secure from the outset.
Multics 是第一个,从设计时就考虑到安全的操作系统

Developers didn’t want mischievous users accessing data they shouldn’t,
开发人员不希望恶意用户 访问不该访问的数据

like students attempting to access the final exam on their professor’s account.
比如学生假装成教授,访问期末考试的文件

Features like this meant Multics was really complicated for its time,
这导致 Multics 的复杂度超过当时的平均水准

using around 1 Megabit of memory, which was a lot back then!
操作系统会占大约 1 Mb 内存,这在当时很多!

That might be half of a computer’s memory, just to run the OS!
可能是内存的一半,只拿来运行操作系统!

Dennis Ritchie, one of the researchers working on Multics, once said:
Multics 的研究人员之一 Dennis Ritchie 曾说过

"One of the obvious things that went wrong with Multics as a commercial success
"阻碍 Multics 获得商业成功的一个明显问题是

was just that it was sort of over-engineered in a sense.
从某种方面来说,它被过度设计了,功能太多了"

There was just too much in it."
This lead Dennis, and another Multics researcher,
所以 Dennis 和另一个 Multics 研究员 \N Ken Thompson 联手打造新的操作系统

Ken Thompson, to strike out on their own and build a new, lean operating system
called Unix.
Unix

They wanted to separate the OS into two parts:
他们想把操作系统分成两部分

First was the core functionality of the OS,
首先是操作系统的核心功能

things like memory management, multitasking,and dealing with I/O,
如内存管理,多任务和输入/输出处理 \N 这叫"内核"

which is called the kernel .
如内存管理,多任务和输入/输出处理 \N 这叫"内核"

The second part was a wide array of useful tools that came bundled with,
第二部分是一堆有用的工具

but not part of the kernel, things like programs and libraries.
但它们不是内核的一部分(比如程序和运行库)

Building a compact, lean kernel meant intentionally leaving some functionality out.
紧凑的内核 意味着功能没有那么全面

Tom Van Vleck, another Multics developer, recalled:
Multics 的另一个开发者 Tom Van Vleck 回忆说:

“I remarked to Dennis that easily half the code I was writing in Multics was error recovery code.”
“我对 Dennis 说,我在 Multics 写的一半代码都是错误恢复代码”

He said, "We left all that stuff out of Unix.
他说:"Unix 不会有这些东西

If there’s an error, we have this routine called panic,
如果有错误发生,我们就让内核"恐慌"(panic)

and when it is called, the machine crashes,
当调用它时,机器会崩溃

and you holler down the hall, ‘Hey, reboot it.’“”
你得在走廊里大喊,“嘿,重启电脑”

You might have heard of kernel panics.
你可能听过 “内核恐慌”(kernel panic)

This is where the term came from.
这就是这个词的来源

It’s literally when the kernel crashes, has no recourse to recover,
内核如果崩溃,没有办法恢复

and so calls a function called “panic”.
所以调用一个叫"恐慌"(panic)的函数

Originally, all it did was print the word “panic” and then enter an infinite loop.
起初只是打印"恐慌"一词,然后无限循环

This simplicity meant that Unix could be run on cheaper and more diverse hardware,
这种简单性意味着 \N Unix 可以在更便宜更多的硬件上运行

making it popular inside Bell Labs, where Dennis and Ken worked.
使 Unix 在 Dennis 和 Ken 工作的 \N 贝尔实验室大受欢迎

As more developers started using Unix to build and run their own programs,
越来越多开发人员用 Unix 写程序和运行程序

the number of contributed tools grew.
工具数量日益增长

Soon after its release in 1971,
1971 年发布后不久

it gained compilers for different programming languages and even a word processor,
就有人写了不同编程语言的编译器 \N 甚至文字处理器

quickly making it one of the most popular OSes of the 1970s and 80s.
使得 Unix 迅速成为 \N 1970~80年代最流行的操作系统之一

At the same time, by the early 1980s,
到 1980 年代早期

the cost of a basic computer had fallen to the point where individual people could afford one,
计算机的价格 降到普通人买得起 \N 这些叫"个人电脑"或"家庭电脑"

called a personal or home computer.

These were much simpler than the big mainframes
这些电脑比大型主机简单得多 \N 主机一般在大学,公司和政府
found at universities, corporations, and governments.
So, their operating systems had to be equally simple.
因此操作系统也得简单

For example, Microsoft’s Disk Operating System, or MS-DOS, was just 160 kilobytes,
举例,微软的磁盘操作系统(MS-DOS)只有 160 kB \N 一张磁盘就可以容纳
在这里插入图片描述

allowing it to fit, as the name suggests, onto a single disk.
First released in 1981, it became the most popular OS for early home computers,
于 1981 年发布,成为早期家用电脑最受欢迎的操作系统

even though it lacked multitasking and protected memory.
虽然缺少"多任务"和"保护内存"这样功能

This meant that programs could,
意味着程序经常使系统崩溃

and would, regularly crash the system.
While annoying, it was an acceptable tradeoff,
虽然很讨厌但还可以接受,因为用户可以重启
as users could just turn their own computers off and on again!
Even early versions of Windows,
哪怕是微软 1985 年发布的早期 Windows \N 虽然在 90 年代很流行

first released by Microsoft in 1985 and which dominated the OS scene throughout the 1990s,
lacked strong memory protection.
但却缺乏"内存保护"

When programs misbehaved,
当程序行为不当时,就会"蓝屏"
you could get the blue screen of death,
a sign that a program had crashed so badly that it took down the whole operating system.
代表程序崩溃的非常严重,把系统也带崩溃了

Luckily, newer versions of Windows have better protections and usually don’t crash that often.
幸运的是,新版Windows有更好的保护,不会经常崩溃

Today, computers run modern operating systems,
如今的计算机 有现代操作系统

like Mac OS X, Windows 10, Linux, iOS and Android.
比如 Mac OS X,Windows 10 \NLinux,iOS和Android

Even though the computers we own are most often used by just a single person,
虽然大部分设备只有一个人使用

you!
你!

their OS all have multitasking and virtual and protected memory.
操作系统依然有**"多任务, “虚拟内存”, “内存保护”**

So, they can run many programs at once:
因此可以同时运行多个程序:

you can watch YouTube in your web browser,
一边在浏览器看 YouTube,一边在 Photoshop 修图

edit a photo in Photoshop,

play music in Spotify and sync Dropbox all at the same time.
用 Spotify 放音乐,同步 Dropbox

This wouldn’t be possible without those decades of research and development on Operating Systems,
如果没有操作系统这几十年的发展,这些都不可能,

and of course the proper memory to store those programs.
当然,我们也需要地方放程序

Which we’ll get to next week.
下周会讨论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/600463.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

北京大学-知存科技存算一体联合实验室揭牌,开启知存科技产学研融合战略新升级

5月5日,“北京大学-知存科技存算一体技术联合实验室”在北京大学微纳电子大厦正式揭牌,北京大学集成电路学院院长蔡一茂、北京大学集成电路学院副院长鲁文高及学院相关负责人、知存科技创始人兼CEO王绍迪、知存科技首席科学家郭昕婕博士及企业研发相关负…

vivado Versal ACAP 可编程器件镜像 (PDI) 设置

Versal ACAP 可编程器件镜像 (PDI) 设置 下表所示 Versal ACAP 器件的器件配置设置可搭配 set_property <Setting> <Value> [current_design] Vivado 工具 Tcl 命令一起使用。 注释 &#xff1a; 在 Versal ACAP 架构上 &#xff0c; 原先支持将可编程器…

408算法题专项-2009年

题目&#xff1a; 分析&#xff1a;09年的链表题目比较简单&#xff0c;直接构建链表&#xff0c;然后根据不同思路模拟即可。 思路一&#xff1a;循环遍历 思考&#xff1a;最容易想到的思路&#xff0c;直接暴力循环。偷了一下懒&#xff0c;变量名称没用题目的&#xff0c;…

力扣每日一题105:从前序与中序序列构造二叉树

题目 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,1…

语音识别--kNN语音指令识别

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

硬盘惊魂!文件夹无法访问怎么办?

在数字时代&#xff0c;数据的重要性不言而喻。然而&#xff0c;有时我们会遇到一个令人头疼的问题——文件夹提示无法访问。当你急需某个文件夹中的文件时&#xff0c;却被告知无法打开&#xff0c;这种感受真是难以言表。今天&#xff0c;我们就来深入探讨这个问题&#xff0…

第六代移动通信介绍、无线网络类型、白皮书

关于6G 即第六代移动通信的介绍&#xff0c; 图解通信原理与案例分析-30&#xff1a;6G-天地互联、陆海空一体、全空间覆盖的超宽带移动通信系统_6g原理-CSDN博客文章浏览阅读1.7w次&#xff0c;点赞34次&#xff0c;收藏165次。6G 即第六代移动通信&#xff0c;6G 将在5G 的基…

VTK —— 三、简单操作 - 示例3 - 将点投影到平面上(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功&#xff0c;若无VTK库则请先参考如下链接编译vtk源码&#xff1a; VTK —— 一、Windows10下编译VTK源码&#xff0c;并用Vs2017代码测试&#xff08;附编译流程、附编译好的库、vtk测试源码&#xff09; 教程描述 本…

Day 63:单调栈 LeedCode 84.柱状图中最大的矩形

84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释&a…

MySQL表的增删改查

在进行表操作之前,一定要use选中数据库 注释&#xff1a;在SQL中可以使用 --空格描述 来表示注释说明 CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母。 文章目录 数据库约束约束类型NOT NULL约束UNIQUE&#xff1a;唯一约束DEFAULT&…

【计算机科学速成课】笔记三

文章目录 17.集成电路真空管时代晶体管时代集成电路时代印刷电路板时代光刻时代 17.集成电路 Over the past six episodes, we delved into software, 过去 6 集我们聊了软件 \N 从早期编程方式到现代软件工程 from early programming efforts to modern software engineerin…

synchronized与volatile关键字

1.synchronized的特性 1.1互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待. 进入 synchronized 修饰的代码块, 相当于 加锁 退出 synchronized 修饰的代码块, 相当于 解锁 syn…

游戏辅助 -- 实战找人物对象基址

本节课在线学习视频&#xff1a; https://pan.quark.cn/s/3e83f4568031 一、打开CE工具&#xff0c;加载游戏进程 二、搜索人物血量144&#xff0c;选择首次扫描 三、进入游戏&#xff0c;让人物血量发生变化&#xff0c;搜索减少的数值 四、发现绿色的数值&#xff0c;一般绿…

Jsoncpp介绍

1.简介 Jsoncpp 是一个 C 库&#xff0c;用于解析和生成 JSON 数据。它提供了一个易于使用的 DOM&#xff08;Document Object Model&#xff09;风格的 API&#xff0c;允许开发者以树形结构的方式操作 JSON 数据。 Jsoncpp 是一个C库&#xff0c;允许操作JSON值&#xff0c;…

246 基于matlab的交流电机动态方程

基于matlab的交流电机动态方程&#xff0c;用于交流电机动态分析。输入电机的额定功率(kW)、电机的额定转速(r/min)、转子外径(m)、铁心长(m)转子槽数、电机极对数 等参数&#xff0c;输出转速变化、力矩变化等结果。程序已调通&#xff0c;可直接运行。 246 交流电机动态 转速…

安卓开发(二)Android开发基础知识

了解Android Android大致可以分为4层架构&#xff1a;Linux内核层、系统运行库层、应用框架层和应用层。 内核层&#xff1a;Android系统是基于Linux内核的&#xff0c;这一层为Android设备的各种硬件提供了底层的驱动&#xff0c;如显示驱动、音频驱动、照相机驱动、蓝牙驱动…

深入浅出(五)JsonCpp库

JsonCpp库 1. JsonCpp 库1.1 JsonCpp库下载 2. JsonCpp库编译与部署3. C示例 1. JsonCpp 库 JsonCpp 是一个开源的 C 库&#xff0c;用于解析、生成和操作 JSON 数据。它提供了简单易用的 API&#xff0c;使得在 C 程序中处理 JSON 数据变得方便和高效。以下是 JsonCpp 库的一…

Dell EMC Storage Unity: Remove/Install Memory Module

SP A 一个内存故障 点击system view -> Enclosures->Top查看 再次查看Alert&#xff0c; 确认内存出现问题 进入Service &#xff0c; 将SP A置为service状态 移出SP A &#xff0c;进行内存更换 更换完内存后&#xff0c;将SP A插入设备&#xff0c;并进行线缆连接 进入…

了解 Postman:这个 API 工具的功能和用途是什么?

在软件开发中&#xff0c;经常听到 Postman 这个软件名。但其实很多新手开发者只知道这是软件开发常用的软件&#xff0c;并不知道实际是一个什么样工具&#xff0c;不知道具体的作用是什么。那今天就跟大家好好唠唠 Postman 这个软件。想要学习更多关于 Postman 的知识&#x…

洛谷 P3391:文艺平衡树 ← Splay树模板题

【题目来源】https://www.luogu.com.cn/problem/P3391【题目描述】 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一个有序数列。 其中需要提供以下操作&#xff1a;翻转一个区间&#xff0c;例如原有序序列是 5 4 3 2 1&#xff0c;翻转区间…