1、计算机与操作系统简介
1.1、计算机组成
1.2、计算机中断
# 软中断(si):由应用程序发起对cpu的中断;
# 硬中断(hi):由硬件设备发起对cpu的中断;
1.3、cpu平台介绍
(1)m68000,m68k ---> 摩托罗拉cpu;
(2)Power---> IMB、第一个多核CPU,功耗大;
(3)PowerPC ---> IBM、简化版的Power;
(4)Sparc,UItraSparc ---> SUN公司cpu;
(5)AIpha ---> DEC的cpu;
(6)x86、x86_64 ----->英特尔cpu;
(7)amd64 -----> AMD的cpu,真正意义上的第一颗64位的cpu;
(8)ARM -----> 现代手机cpu平台,只卖规范,不会直接生产硬件;
1.4、二进制
# 二进制:由0和1两个字码来表示的数,基数为2,进位规则为“逢二进一”;
# 计算机内部识别的最小单位为:字节byte,1byte=8bit;
![](https://images2018.cnblogs.com/blog/1243491/201807/1243491-20180727100241636-1116102609.png)
2、各大操作系统分支介绍
(1)BSD分支
--->Sysv
--->BSD Lite
--->FreeBSD--->Mac OS,IOS
--->NetBSD
--->OpenBSD:最安全的BSD,一般用于防火墙内核;
(2)Slackware--->Suse
(3)Debian--->Ubuntu--->Linux Mint
(4)Redhat
--->Redhat 9(2003年停止维护)--->面向PC版本--->Fedora(社区版,版本更新频繁)
--->RHEL(Redhat Enterprise Linux)--->RHEL 7.0
--->Centos 7.0
(5)Gentoo--->Daniel Robbins(BSD作者之一)创建
(6)LFS--->Linux From Scratech(从零构建linux)
(7)Android--->Linux+Jvm+Java
(8)IOS--->FreeBSD+Object-c(swift)
3、开源协议
# 开源协议图:
# 开源协议说明:
(1)BSD授权:鼓励代码共享,但需要尊重作者著作权;
(2)Apache Licence 2.0:对商业软件友好;
(3)GPL:出发点是代码开源,免费使用和修改,衍生代码的开源使用,但不允许衍生代码作为闭源的商业软件发布和销售;
(4)LGPL:是一个主要为GPL类库使用设计的开源协议;(仅调用库,不需要开源)
(5)GUN:是一个软件组织,并不是协议;
4、开发接口标准
4.1、二进制代码
# 二进制代码:计算机指令,例如:add命令--->汇编器--->二进制格式指令
4.2、C语言程序的执行过程
# 预处理--->编译--->汇编--->链接
4.3、程序调用
# 程序调用实际上是调用的共享代码模块:库
windows:dll文件;
linux:so文件;==>shared object
4.4、什么是ABI接口
# 总所周知,windows下的应用程序到linux下是无法运行的;
# 一个应用程序一旦制作成为二进制格式,其适用的平台也就固定,编译成exe格式的就只能在windows平台一运行,编译成elf格式的就只能在类unix平台运行;
# 这就是就是由二进制接口规则定义的,也就是ABI;
# 总结:ABI是一种操作系统接口格式,也是一种规范,定义了系统平台所属;
4.5、什么是API接口
# API是一种应用编程接口,程序员一般针对API接口进行编码;
# windows和linux 的应用程序格式虽然不一样,但是编码接口API是可以兼容的,也就是说:程序员在windows平台下以兼容模式编写的程序源代码,在linux平台是兼容的;
# 面向库的编程,程序员写的程序源代码是面向API进行的,一旦编译成二进制格式,就是面向ABI了;
5、用户空间与内核空间
5.1、User space 与 Kernel space
# 简单的说:内核空间就是linux内核的运行空间,用户空间是用户程序的运行空间;为了安全,它们是相互隔离的,即使用户程序崩溃,内核也不受影响;
# 内核空间可以执行任意命令,调用一切系统资源;用户空间只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(又称为system call),才能向内核发出指令;
例如:
1 str=“hello” #用户空间
2 x=x+2
3 file.write(str) #切换到内核空间
4 y=x+4 # 切换到用户空间
上面代码:1和2行是简单的赋值运算,在用户空间执行;3行需要写入文件,就需要切换到内核空间,因为用户不能直接写文件,需要通过内核来完成操作;