LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: diver123

弱弱地问linux下有没有汇编语言呀

[复制链接]
发表于 2006-4-8 09:46:22 | 显示全部楼层
windows高手没有系统代码照样进Ring0(那段代码在Intel网站上就能查到),是因为那个是windows自己留的后门。好像XP之后就堵上了。
回复 支持 反对

使用道具 举报

发表于 2006-4-8 11:57:53 | 显示全部楼层
保护模式最早是从286开始的。

而且Unix和保护模式似乎也没有必然的联系,Unix诞生之初从PDP-7到早期的PDP-11,不要说没有特权级别,连MMU都没有。

后来的很多类Unix系统也不是必须特权级别,比如知名一些的Xenix,它是有8086的版本的,虽然大家常见的是286版。

Post by zhllg
前面有人怀疑汇编是否能用汇编控制整个系统,我回答他,如果有那么一种语言的话,那这个语言只能是汇编,如果汇编也不行,其他语言就不用想了

你的问题又进了一步
当然要想完全控制的话,指令必须运行于最高的特权级别。这样的代码一般都在内核里。只有个别这种级别的指令可以从用户层发出。
Linux里自然有保护模式。
这是UNIX诞生之初就有的。作为UNIX的继承者,Linux自然也有。
事实上Linux诞生于1991年,这个时间不是偶然的
而是因为当时intel刚刚发布支持保护模式的386 CPU不久,廉价的386 CPU上出现平民化的UNIX是迟早的事情
而且当时不只一个,还有386BSD等
回复 支持 反对

使用道具 举报

发表于 2006-4-8 12:40:08 | 显示全部楼层
languages(like c/cpp,assemable) have nothing to do with the controlling of a system, it's the privilege who determines, but the libs of a language may limit you with sth
回复 支持 反对

使用道具 举报

发表于 2006-4-8 18:58:44 | 显示全部楼层
Post by woolzey
保护模式最早是从286开始的。

据说是不太完善的一个实现
回复 支持 反对

使用道具 举报

发表于 2006-4-10 03:17:52 | 显示全部楼层
用户空间的程序无法控制整个系统,无论你用什么语言写!因为有些指令是有特权级别的,在系统引导完毕之后,cpu就只听电源和操作系统的了,那些特权指令对用户空间的程序完全禁用。

有人说汇编可以做到,也没错,但你的程序必须在操作系统切换到保护模式之前,比如在bootloader里做,但那时还没操作系统什么事儿,所以与用哪个操作系统无关了。面对裸机你爱干啥就干啥;), 要不就是修改kernel,改出一个有大洞的内核来;)

Windows可以,那是bug!所以才叫瘟到死。
回复 支持 反对

使用道具 举报

发表于 2006-4-11 11:00:17 | 显示全部楼层
是啊,我也觉得zhllg在胡说八道,好像很牛是的,在误导大家
linux只有系统引导从实模式保护模式切换时是必须用汇编,其他都是用c来实现,
为什么有些c代码中嵌入汇编语言,主要是从效率的角度上考虑的。

Post by woolzey
保护模式最早是从286开始的。

而且Unix和保护模式似乎也没有必然的联系,Unix诞生之初从PDP-7到早期的PDP-11,不要说没有特权级别,连MMU都没有。

后来的很多类Unix系统也不是必须特权级别,比如知名一些的Xenix,它是有8086的版本的,虽然大家常见的是286版。
回复 支持 反对

使用道具 举报

发表于 2006-4-11 12:49:40 | 显示全部楼层
前面确实怪我没有说清楚,286确实有保护模式
不过我只不过不想把话题岔的离题太远,而去讲intel cpu的演进史
可是我觉得我在我那一贴里(注意,不是说woolzey)提286的保护模式实在是有点像向人炫耀回字的四种写法
286 could not revert to real mode without resetting the processor and although in theory real mode applications could be directly executed in 16-bit protected mode if it followed some rules, many DOS programs break them, so protected mode was not widely used until the appearance of its successor, the 32-bit Intel 80386, which could go back and forth between modes easily.
286的保护模式没几个人用的,几乎相当于没有

PDP-7 PDP-11没有MMU这点我确实没有听说过
不过我还没有查到相关资料提到这一点

UINX是多任务多用户的分时操作系统,没有硬件的支持实现起来实在有难度
所以在没有特权级别,MMU的cpu上实现的UNIX,只不过是不得已而为之,如果他们手里有intel 386,决不会放着不用的
所以个人认为这样的UNIX,不提也罢。

效率是c内联汇编的一个要实现的目的,但是把C语言不能产生的代码包在c函数里以方便调用也确实是内联汇编的一个重要作用,我想gcc的作者在实现这个扩展的时候必定这两个方面都有考虑

我不知道还有什么地方“误导”了大家
回复 支持 反对

使用道具 举报

发表于 2006-4-11 14:31:29 | 显示全部楼层
Post by woolzey
保护模式最早是从286开始的。

而且Unix和保护模式似乎也没有必然的联系,Unix诞生之初从PDP-7到早期的PDP-11,不要说没有特权级别,连MMU都没有。

后来的很多类Unix系统也不是必须特权级别,比如知名一些的Xenix,它是有8086的版本的,虽然大家常见的是286版。

有关286再多贴一点东西
The 8086 runs in only one mode - the real mode. When Intel engineers designed the 286, they wanted to support extra features that would be incompatible with the 8086. They also wanted to maintain 8086 compatibility. To satisfy these requirements, the 286 uses two modes - Real Mode and Protected Mode. Real mode, the default, makes the chip act like an 8086 with only minor enhancements. There is a huge difference when it comes to protected mode. Almost all programs designed to run on an 8086 won't run under protected mode without major changes. DOS is one of these programs.

The 386 has all the features of the 8086 and 286, with many more enhancements. The default, as in the earlier processors, is real mode. Like the 286, the 386 can operate in protected mode. However, the protected mode on 386 is vastly different internally. Protected mode on the 386 offers the programmer better protection and more memory than on the 286.

PDP-7 PDP-9看来是没有MMU的,不过PDP-11应该是有的
请看下面两个连接
http://mail-index.netbsd.org/tech-ports/1997/04/25/0001.html
http://www.core.org.cn/OcwWeb/El ... /address_spaces.htm
Lion注释的源代码应该是PDP-11的,是有保护模式的

经典的UNIX是多用户多任务的,以至于操作系统教科书里根本都不提PDP-7 PDP-9是无MMU的
UNIX是稳定的,而无MMU,保护模式的很容易crash的, 那样的UNIX我觉得实在不能算是UNIX

不过还是感谢woolzey和上面那位兄弟
回复 支持 反对

使用道具 举报

发表于 2006-4-12 01:58:21 | 显示全部楼层
286的保护模式不完善,这句话我部分同意。不过我个人认为,286上保护模式不流行,很大程度上是市场和需求的原因,而不是技术原因。当时PC机上对多任务多用户的需求很少,也不需要那么多的内存,实模式的DOS足够用了;等这个需求出来的时候,286也已经过时了,而且和广泛存在的DOS应用兼容性不好。

286其实具备了现代操作系统所需要的所有(说所有可能不太严密)功能,当时至少有两个流行的系统是可以跑保护模式了:Windows 3.0和Xenix。早两年还有人试图把Linux移植到286上去。这说明技术上并不是问题。

在我看来,从技术角度说,286比386缺少两个关键的东西,一个是分页机制,一个是vm86模式。虽然并不是必需的,但这两个特性给操作系统设计带来很大的方便,尤其是前者。不过要是说286和386的保护模式非常不同,这点我是不同意的。

至于UNIX,不要用现在的眼光去看过去的事情。UNIX开始也不是以稳定著称的,相反它是以能在很烂的机器上跑而闻名的。它最初的设计目的是在没人用的机器上玩游戏和字处理。这点似乎很类似几年前的Linux。PDP-11的早期型是没有MMU的(比如UNIX最早移植到的PDP-11/20),后来的型号是有的(PDP-11/45?)。我印象中看过D. Ritchie写过一篇文章,说他们给专利局作的基于UNIX的字处理系统的一个问题就是因为内存没有保护经常会当机,特别是开发程序时;他也展望新的PDP-11会解决这个问题。

不过好像讨论这些有些离题万里了。

Post by zhllg
有关286再多贴一点东西
The 8086 runs in only one mode - the real mode. When Intel engineers designed the 286, they wanted to support extra features that would be incompatible with the 8086. They also wanted to maintain 8086 compatibility. To satisfy these requirements, the 286 uses two modes - Real Mode and Protected Mode. Real mode, the default, makes the chip act like an 8086 with only minor enhancements. There is a huge difference when it comes to protected mode. Almost all programs designed to run on an 8086 won't run under protected mode without major changes. DOS is one of these programs.

The 386 has all the features of the 8086 and 286, with many more enhancements. The default, as in the earlier processors, is real mode. Like the 286, the 386 can operate in protected mode. However, the protected mode on 386 is vastly different internally. Protected mode on the 386 offers the programmer better protection and more memory than on the 286.

PDP-7 PDP-9看来是没有MMU的,不过PDP-11应该是有的
请看下面两个连接
http://mail-index.netbsd.org/tech-ports/1997/04/25/0001.html
http://www.core.org.cn/OcwWeb/El ... /address_spaces.htm
Lion注释的源代码应该是PDP-11的,是有保护模式的

经典的UNIX是多用户多任务的,以至于操作系统教科书里根本都不提PDP-7 PDP-9是无MMU的
UNIX是稳定的,而无MMU,保护模式的很容易crash的, 那样的UNIX我觉得实在不能算是UNIX

不过还是感谢woolzey和上面那位兄弟
回复 支持 反对

使用道具 举报

发表于 2006-4-12 10:00:38 | 显示全部楼层
Thanks
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表