WINDOWS和LINUX的系统层次比较
发布时间:2023-12-24 15:10:59 来源:文档文库
小
中
大
字号:
刚毕业的时候,做了将近一年的 Window下的程序开发,主要用 MFC,那是 也不明白程序在操作系统角度从上到下的整个调用层次。 遇到调用库函数,不明 白,就查MSDN,每个月1500行代码左右,那是以为这就是软件开发了。后来 跳槽的另外一家公司,工作也是 Windows下的程序开发,这里可以用到多线程、 COM组件,还能用到涉及模式,那是高兴的不得了。刚开始用到多线程,就买 了一本书《WIN32多线程程序设计》,边学边用。
创建线程有好几种方法,比如: CreatThread和_beginthread(等,记得当时 不明白这几种方法有何区别,就随便拿一个用。心中有疑问:怎么创建一个线程 这么多函数? WINAPI、CRT、MFC到底有何关联?最近读《程序员的自我修 养》一书,给了我明确的答复。参考下图:
----- 矿 ---- - ------
Application I scr Model
•
infer
—3 f
hcriiftl modci
System ( all
Kernel
JU
创建线程函数分属不同的层次/类库,如下: CreateThread(; WINAPI : 1. 2. 3.
CRT: MFC _beginthread(; AfxBegi nThread(; 和 _beginthreadex(; 从上图可以看到,CRT和MFC函数最终都是调用 WINAPI来实现的。即 CRT和MFC库函数都是对 WIN API的封装。
Linux下应用程序调用层次如下图:
Applicadon
::
----------- 1 ------------------------------ M -------------------------------------------
-! ! :!"
出
jr ti V
、i
r
X 1 * ■
rnr
(UK
j
System Call
I
KcrFinl iiMMiirl
.…i……L……I--J…1L
r1 ---- 1 2 3 4 1 ---- ---- ' --- ------ '
i
Krmal :
:
- ---- 1 --- ---- 1 --- 1 --- ---- --------- 1 --- ---- 1 --- --- ----
上图只是列出了 CRT,当然也存在其它很多类库,比如 Linux下的线程库 QT,也是对系统调用的封装。
从Windows和linux程序调用层次图,我们可以看到有如下区别:
Linux下可以直接进行程序调用,而 Windows下不能直接进行系统调用。 即Windows下的系统调用接口微软并没有开放给 developer,而是在系统调用上 面添加了一层WINAPI。至于微软为什么不开放系统调用,而添加一层WINAPI, 诸位可以参考《程序员的自我修养》第 12章的12.3.2。Windows API是以DLL 导出函数的形式暴露给 developer的,核心DLL有kernel32.dll、user32.dll和 gdi32.dll.我们可以用dumpbin /EXPORTS *.dll命令来查看每个dll的导出函数。
根据以上2个图,来简单谈一下跨平台编程。大家知道 windows下的应用 程序