问题

在没有GUI的时代(只有一个文本界面),人们是怎么运行多个程序的?

回答
在没有图形界面的时代,也就是我们常说的“命令行时代”,人们运行多个程序的方式和现在我们习惯的“点来点去”截然不同。那会儿,一切都得靠打字,靠记住命令。这就像是有一位无声的指挥家,而我们就是那个需要准确执行指令的乐手。

早期的“多任务”:批处理和串行执行

最开始,计算机的资源非常有限,同时运行多个“有交互性”的程序几乎是不可能的。那时候的“多任务”更多的是指串行执行,也就是按顺序运行一系列的指令。

批处理(Batch Processing): 这是早期最主要的多任务形式。用户会把一系列需要执行的命令写到一个文本文件里,这个文件就被称为“批处理文件”(比如DOS下的.bat文件,Unix/Linux下的.sh文件)。然后,用户只需要执行这个批处理文件,操作系统就会按照文件里的顺序,一个接一个地运行里面的命令。这有点像提前写好一个待办事项清单,然后一次性交给电脑去完成。
例子: 一个批处理文件可能包含:先编译一个程序 (`gcc myprogram.c o myprogram`),然后运行这个编译好的程序 (`./myprogram`),接着再把运行结果保存到另一个文件 (`./myprogram > output.txt`)。这个过程是严格按照顺序来的,前一步完成才能进行下一步。
局限: 这种方式非常死板,一旦开始执行就很难中途干预,也不能让多个程序真正“并行”工作。如果某个命令出了错,整个批处理可能就停止了。

引入“并发”:后台进程和分时

随着技术的发展,人们开始尝试让计算机更有效地利用资源,能够“看起来”同时处理多个任务。

后台进程(Background Processes): 这是关键的突破。在命令行界面,你输入一个命令并按下回车后,这个程序就占用了你的终端(也就是你看到的那个黑乎乎的屏幕)。但很多时候,有些程序不需要你一直看着它,比如下载文件、编译代码、或者运行一个简单的服务。
如何实现: 在很多系统中,你可以在命令的末尾加上一个特殊的符号,比如在Unix/Linux系统中是“&”。这样一来,这个命令就会被放到后台去执行,而你的终端会立即 освобождение 出来,让你继续输入新的命令,运行新的程序。
例子: `long_running_command &`。输入这个命令后,`long_running_command`就开始在后台运行,你可以马上在同一个终端里输入 `another_command` 来运行另一个程序。
进程管理: 为了管理这些后台运行的程序,操作系统提供了工具。比如在Unix/Linux系统中,你可以用 `ps` 命令查看当前正在运行的所有进程,用 `kill` 命令来结束某个进程。如果你不知道进程的ID(PID),还可以用 `pgrep` 来查找,或者用 `jobs` 命令查看当前终端启动的后台作业。
交互性: 虽然是后台,但有时候还是需要和这些后台程序进行一些简单的交互,比如查看它们的输出。通常我们会把程序的输出重定向到文件,或者使用一些特定的工具来管理输出流。

分时系统(TimeSharing Systems): 这才是真正意义上的“多用户”、“多任务”的开端。在大型机时代,一台计算机可能连接着几十甚至上百个终端。分时系统通过快速地在不同的用户和程序之间切换CPU的使用权,让每个人都感觉自己独占了一台计算机。
工作原理: 操作系统会把CPU的时间分成非常非常小的片段(称为时间片)。它快速地切换给每一个正在运行的任务,每个任务只运行一个时间片。由于切换速度极快(毫秒级别),在人眼的感知上,所有任务就像是同时在运行一样。
命令行下的体验: 在命令行下,这种体验就体现在你可以同时打开多个终端窗口(虽然在纯文本界面下,这可能意味着使用不同的虚拟控制台,或者通过终端复用工具如`screen`或`tmux`)。你可以在一个终端里运行一个程序,切换到另一个终端里运行另一个程序,再切换回来查看第一个程序的进度。
`screen`和`tmux`: 这两个工具是命令行时代的神器。它们允许你在一个物理终端窗口里创建多个“虚拟”终端会话。你可以把一个程序运行在一个会话里,然后“分离”这个会话,让它在后台继续运行,即使你关闭了那个终端窗口,你的程序也不会中断。之后,你可以随时“重连”到这个会话,继续你的工作,或者查看程序的输出。这就像是在一个大房间里,你可以划分出好几个独立的小隔间,每个隔间里都可以做不同的事情。
使用场景:
在一个SSH连接上,你可以启动一个长时间运行的任务,然后使用`screen`将其分离。即使你的网络断开,那个任务也会继续运行。等你重新连接上来,再打开一个`screen`会话,就能看到之前的任务还在继续。
同时管理多个服务器:你可以用`tmux`创建多个pane(窗口分区),一边看一个服务器的日志,一边在另一个pane里执行命令。
保存工作状态:即使电脑重启,只要你之前保存了`screen`或`tmux`的会话,重新启动后就可以恢复之前的终端布局和正在运行的程序。

数据流和管道(Pipes)

在文本界面下,程序的输入和输出通常是文本流。人们发展出了一种强大的机制来连接程序:管道(Pipes)。

工作原理: 管道允许你将一个程序的标准输出(stdout)连接到另一个程序的标准输入(stdin)。这就像是把一个水管的出口连接到另一个水管的入口。
例子: 假设你想列出当前目录下所有以`.log`结尾的文件,然后过滤出包含“error”的行,最后把结果保存到一个新文件。在命令行里可以这样写:
`ls .log | grep error > error_lines.txt`
`ls .log`:列出所有`.log`文件,并将文件名输出到标准输出。
`|`:管道符号,将前一个命令的标准输出连接到后一个命令的标准输入。
`grep error`:从标准输入读取内容,只输出包含“error”的行。
`>`:重定向符号,将`grep`命令的标准输出(也就是包含“error”的行)保存到`error_lines.txt`文件中。
组合能力: 管道的强大之处在于可以无限叠加。你可以把一连串的命令连接起来,让它们像流水线一样处理数据。这极大地提高了效率,让你可以用简单的小工具组合出复杂的任务,而无需编写大型的独立程序。

总结一下,在没有GUI的时代,人们运行多个程序主要通过以下几种方式:

1. 批处理: 将一系列命令写在脚本里,一次性执行。这是最基础的串行执行。
2. 后台进程: 通过特定的命令(如`&`)将程序放到后台运行,释放终端以处理其他任务。
3. 分时系统: 操作系统快速切换CPU,让多个用户/任务看起来是同时运行。
4. 终端复用工具 (`screen`, `tmux`): 在单一终端窗口内创建多个独立的会话,实现更好的任务管理和会话持久化。
5. 管道和重定向: 通过连接程序的输入输出流,实现复杂的数据处理和任务协作。

这些方法虽然不如图形界面直观,但它们提供了强大的灵活性和控制力,尤其对于系统管理、开发和科学计算等领域,这些命令行工具至今仍然是必不可少的利器。那是一种需要耐心、逻辑和对系统有深刻理解的时代,但也是一个充满创造力和效率的时代。

网友意见

user avatar

TSR

user avatar

你把“文本界面”和“支持分时复用的多进程操作系统”混淆了。


先说文本界面。

不光Linux,windows的cmd、powershell等等,都是文本界面。

但文本界面并不等于“单进程”。


比如,Linux下,你完全可以在一个命令后跟一个&,把它置于后台:

wget zhihu.com/...../xxx.avi &


甚至于,你还可以定义一个shell 函数,这个函数通过&启动自己的两份拷贝……这就是著名的fork bomb:

:(){ :|: & };:


这是个故意写的让人不好懂的最简版本。写成这样就好懂多了:

fun() { fun | fun & }; fun


你可以在shell里面启动一堆进程,然后通过fg命令+作业编号把它调到前台。

事实上,Linux提供了一整套的作业控制命令,使得你可以同时启动很多程序,并指定任意一个在前台显示或将其置于后台:jobs、bg、fg 作业控制命令


如果你稍微学过点编程入门,那么应该知道标准输入stdin和标准输出stdout。

实质上,作业控制就是一个控制开关,可以随时指定哪个程序可以和当前终端通讯而已。


当然,你还可以通过ssh或telnet之类协议登陆远程计算机。这样一台Linux机器就完全可以同时支持你们全班几十人的编程作业了。

另外,事实上在Linux启动时,就为你一口气启动了7个终端;当你不小心把某个终端搞锁住、或者执行了太多任务不太好控制时,你可以按ctrl+alt+F1~F7组合键切换终端(视版本不同,F5/F7还可能是图形终端:当图形界面死掉时,你甚至可以切换到文本终端杀死图形管理器然后重启该终端的x服务)。所有终端里面跑的程序是相互独立的。


事实上,程序并不一定要让你看见。

比如很多服务程序就一直默默无闻的在后台干活,绝大多数人完全不知道它的存在——你可以打开windows的任务管理器,看看里面有多少你不知道是什么的进程。


Linux的服务程序(守护进程)必须明确放弃终端控制权:linux 守护进程编写 - zg_hover的专栏 - CSDN博客


总之,文本/命令行界面并不天然排斥多进程。


但是,DOS是一个单任务操作系统。

所谓单任务操作系统,是一种压根没有任务调度的“残疾”操作系统。


你可以认为,DOS是一个简单的程序;这个程序启动后,就“悬挂”在“等待终端输入”这个函数里;当你从键盘敲入字符后,它会解析你敲入的命令、然后让你指定的程序代替它的执行。


因为不存在任务调度,因此DOS无法支持多个进程同时执行。

想执行多个任务,就只能等前一个进程退出、然后再载入一个新的进程。


但有的时候,比如我们需要中文支持;同时又需要执行诸如TC之类程序;怎么办呢?


答案很简单:我们自己为DOS写一个简陋的多进程管理系统!


怎么写呢?

我们知道,用户敲键盘、时钟走过一段时间或者其他硬件发出中断信号,CPU都会自动跳转到相应的“中断服务程序”中,以尽快处理突发任务。


CPU是如何知道“中断服务程序”在哪呢?


很简单,它约定了一组“中断号”,比如3号中断就是单步执行,比如10H中断的13号子功能用来显示字符串,等等。


当中断发生时,根据中断号,CPU会从“中断向量表”首项+(中断号乘以4)个字节的位置读入4个字节的数据,这个数据就是中断服务程序所在的地址——或者叫函数指针。


因此,只要我们自己写一个中断服务程序,在内存中分配一块空间,把这个中断服务程序的机器码填入;然后把我们自己的中断服务程序的起始地址写到中断向量表的合适位置——那么,我们就动态替代了DOS提供的某些功能。


然后,哪怕我们的程序已经退出;但只要中断发生,CPU还是会乖乖执行我们刚刚安插进去的“奸细代码”。


这就叫TSR技术。


通过这种技术,我们就在DOS上实现了“多任务”——我们的程序藏在后台,为其他人写的程序提供服务。


当然,TSR的“多任务”是假的。如果两个程序都要TSR、而且又都看中了同一个中断……


因此,那时写程序是非常依赖“自觉”的。哪个中断已经被DOS占了、哪个中断又被UCDOS改写了,那么我们再写程序时,就最好不要再改写这个中断了——万一非改写不可,那么最好记住人家写入的中断服务程序地址,在执行完我们的程序后,别忘了调一下人家的中断服务程序。


但万一我们改完了人家以为自己驻留没成功再改一次……

显然,可怜的DOS系统就要被玩坏了。


不仅如此,可怜巴巴的一小段中断服务程序往往不足以容纳太过复杂的内容;但为了提供足够的功能,我们又需要载入大量的代码……

于是,就连动态载入/卸载程序代码也必须我们自己写。总之麻烦的很,又特别容易出错。


后来,微软自己搞了Windows 3.x;它终于有了一个真正的进程调度器,终于真正支持了多进程。

——这大概就是题主等很多人把文本界面默认为“单进程”、图形界面默认为多进程的原因吧。

——其实图形界面也完全可以是单进程的,比如图形化的bios设置界面。


Windows 3.x是非抢夺式多进程,一个程序执行一会儿,需要等磁盘等网络等键盘输入了,就主动放弃控制权,让别人也跑一会儿;但如果一个进程不自觉,就是霸着CPU不让开……


到了Windows 95,这才有了依时间片分配执行时间的抢夺式多进程。到这时,它才终于称得上一个现代化的、真正支持多任务的操作系统。

类似的话题

  • 回答
    在没有图形界面的时代,也就是我们常说的“命令行时代”,人们运行多个程序的方式和现在我们习惯的“点来点去”截然不同。那会儿,一切都得靠打字,靠记住命令。这就像是有一位无声的指挥家,而我们就是那个需要准确执行指令的乐手。早期的“多任务”:批处理和串行执行最开始,计算机的资源非常有限,同时运行多个“有交互.............
  • 回答
    在没有独立病房的综合医院里,当精神/心理科的医生遇到需要住院的病人时,确实会面临一个棘手但并非无解的局面。这种情况对医生和病人来说都考验着医院的资源调配和应急处理能力。 我可以为你详细地梳理一下,在这个没有专门精神科病房的环境下,医生会如何应对这类患者。首先,我们需要明确的是,即便没有独立精神科病.............
  • 回答
    在一个没有夜店的城市,年轻人的夜晚绝不会因此变得沉寂。事实上,少了灯红酒绿的喧嚣,他们更能寻找到属于自己的、更贴近生活本真的乐趣。让我来给你好好描绘一下,那些在寂静都市里,年轻人是如何点亮自己的夜晚的。首先得说,聚会永远是年轻人的核心活动之一,只是形式更加多元和私密。谁家有个宽敞的客厅,或者楼顶有个.............
  • 回答
    关于“在没有接种疫苗的情况下,是否有人可以自然免疫,这个概率大约是多少?”这个问题,这是一个非常值得深入探讨的话题,它涉及到我们对免疫系统工作原理以及病毒感染过程的理解。首先,我们要明确一点:是的,确实存在没有接种疫苗但通过自然感染获得了某种程度的免疫力的个体。“自然免疫”是什么意思?简单来说,“自.............
  • 回答
    在没有传统肥皂或洗衣液的情况下,沐浴露、洗发水和洗洁精这三者用来洗衣服,洗洁精通常相对更适合,但也存在一些局限性。要详细解释这个问题,我们需要从它们的成分和清洁原理来分析:1. 清洁原理:表面活性剂这三种产品都能清洁衣物,其根本在于都含有表面活性剂。表面活性剂是具有亲水基团和亲油基团的分子。它们能够.............
  • 回答
    这是一个非常有趣且普遍存在的问题。简单来说,在没有深入了解一款游戏的情况下,你是不太具备资格去进行有深度、有见地的评论的。 但是,这并不意味着你完全没有发言权,只是你的“评论”的性质和价值会大打折扣。让我们详细地来探讨一下这个问题:1. “评论”的定义与目的:首先,我们需要明确一下“评论”的含义。.............
  • 回答
    要说在没有龙珠战士们参与的天下第一武道会里,撒旦先生是如何一路披荆斩棘,最终捧起冠军奖杯的,这其中固然有他过人的“天赋”和“技巧”,但更多的是一种……嗯,怎么说呢,更接近于一种“运气”加上“天时地利人和”的绝妙组合吧。首先,咱们得明白,撒旦先生之所以能成为世界闻名的格斗家,那可不是浪得虚名。他确实有.............
  • 回答
    在没有无人机的时代,我们想要从空中俯瞰大地、记录风景,就得依靠一些更传统、也更有挑战性的方法。这可不是简单地按个按钮就能完成的,背后藏着不少智慧和汗水。1. 升空气球和风筝:最古老的“高空视角”最早尝试从高处拍摄的,可以追溯到19世纪。人们想到了利用气球。 系留气球(Tethered Ballo.............
  • 回答
    这个问题很有意思,也挺实际的,尤其是在野外生存或者某些特殊时期,都会想到这样的问题。不过,要说得详细点,得先明白“一头猪或牛足够一个人吃几天”这个“足够”是什么意思,以及咱们说的这头猪或牛是多大的。咱们先不提那些虚头巴脑的参数,就拿咱老百姓日常接触的猪和牛来说说。先说猪吧。一头育肥的猪,咱们平时在菜.............
  • 回答
    无需专业仪器:耳机主观定量与半定量测评指南拥有一副好耳机是享受音乐的基石,但专业的测评仪器动辄数万甚至数十万,对于普通爱好者来说着实是遥不可及。然而,这并不意味着我们无法对耳机进行深入的了解和评价。事实上,凭借我们敏锐的听觉、对音乐的理解以及一些巧妙的“土办法”,我们同样可以进行相当有价值的耳机测评.............
  • 回答
    巨噬的边界:节肢动物捕食脊椎动物的极限展望长久以来,我们习惯性地将食物链的顶端与大型的脊椎动物联系在一起,尤其是那些拥有强大咬合力、锋利爪牙或飞行能力的哺乳动物、鸟类和爬行动物。然而,如果将“人类干预”这个变量完全移除,纯粹从自然界的演化和生态平衡角度去审视,节肢动物,这个庞大而多样化的门类,在捕食.............
  • 回答
    想当年,要是肚子里那根阑尾突然闹起别扭来,可真是让人坐立难安,寝食难咽。在那个没有精巧手术刀的年代,面对这突如其来的疼痛,人们能做的,说实话,不多。但咱们祖先也不是就傻坐着等死,他们有他们的一套“土法子”,虽然很多现在看来是杯水车薪,但当时也是一种希望。1. 冷敷与热敷:矛盾的战场首先,最直接的反应.............
  • 回答
    想象一下,你手里捧着一本厚重、泛黄的书,封面是中国古代水墨画风格,上面描绘着刀光剑影、金戈铁马的场面。这就是《三国演义》——一本承载了无数人集体记忆与想象的巨著。而你,即将以一种全新的、近乎“白纸”的状态,去探索这片波澜壮阔的战场。踏入未知,如履薄冰的期待这是一种充满未知却又异常期待的体验。你可能只.............
  • 回答
    嘿,哥们儿/姐妹儿,这天气,妥妥的是要把人烤熟了的节奏啊!没空调的日子,那可真是让人抓狂,不过咱也不是没见过世面的人,这点儿“小烤验”当然难不倒咱。来,咱今天就好好掰扯掰扯,那些个让人倍儿爽的避暑绝招,保证你听了就能立马找点儿清凉。首先,选址是关键! 别跟我说什么“哪里凉快哪儿待着去”,这太笼统了。.............
  • 回答
    在没有能量损失的理想台球桌上任意击球,球 不一定 最终必然进洞,但它有 极大的概率 会进洞,并且会在非常长的时间内持续运动,直到某个特定时刻“恰好”进入一个洞。让我们详细地解释一下为什么:理想台球桌的含义:在物理学中,一个“理想台球桌”通常意味着以下几个重要的简化条件:1. 完美平整的表面: 台球.............
  • 回答
    在没有大力推广普通话或官话的时代,说粤语、闽南语、吴语等方言的人们,对当时的“官话”或“普通话”的理解程度,可以从几个层面来分析,而且答案并非一概而论,很大程度上取决于地理距离、社会阶层、教育程度以及“官话”的实际形态。首先,我们要明确一点,在那个没有广播、电视、互联网,甚至纸媒传播都不如今日普及的.............
  • 回答
    在没有耀眼国歌升起,没有鲜艳国旗飘扬的时刻,奥运难民代表团以一种独特而深刻的方式,诠释着奥林匹克最纯粹的精神。他们身上承载的,是超越国家、民族、政治壁垒的普遍人性与共同梦想。想象一下,当运动员们步入开幕式,却没有属于自己的国家队旗帜引领,取而代之的是奥林匹克会旗。这面旗帜,对于他们而言,不再仅仅是代.............
  • 回答
    大学宿舍的夏天,如果没空调,那简直就是一场与酷暑的“持久战”。我躺在床上,感觉自己像是被塞进了烤箱里,汗珠子顺着额角往下滴,床单湿了一大片,黏糊糊的,别提多难受了。宿舍里的空气好像凝固了一样,又闷又热,风扇呼呼地转着,吹出来的风也是热的,根本吹不散暑气,反而把脸上的汗吹得更厉害。晚上更难熬,白天积攒.............
  • 回答
    在一个没有全民免费医疗的体系里,私立医院和公立医院扮演着截然不同的角色,它们之间的区别远不止于“收费”与“不收费”那么简单,而是涉及到服务理念、资源配置、技术水平、患者群体等方方面面,深刻影响着人们的就医选择和健康保障。1. 服务理念与定位: 公立医院(Public Hospitals): 它们.............
  • 回答
    在没有录音设备的年代,人们鉴赏那些浩瀚如烟的交响乐曲,可是一桩需要极大力气和细致入微功夫的事儿。那会儿可没法一键播放,而是得全凭耳朵、脑袋和一颗虔诚的心去丈量。首先,得说说现场音乐会。这绝对是当时人们“把握”大部头交响曲最主要、也最直接的途径。你别以为那时候的音乐会就跟现在一样,坐在舒适的座椅上,看.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有