计算机构成
- 计算机(computer):俗称电脑,是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动,高速地处理,然后把处理结果输出的现代化智能电子设备.
- 计算机有两大部分组成,硬件Hardware和软件Software两部分组成
- 计算机发展史:
- 第一代计算机(1946-1957),电子管时代.
- 第二代计算机(1958-1964),晶体管时代.
- 第三代计算机(1965-1970),集成电路时代.
- 第四代计算机(1971年以后),大规模集成电路时代.
- 量子计算机,和神经芯片,是以后计算机的两大发展点.
冯·诺依曼理论
- 数字计算机的数制采用二进制.
- 数字计算机应该按照程序顺序执行.
- 数字计算必须有一个存储器,一个控制器,一个运算器(用于完成算术运算和逻辑运算),还必须有输入和输出设备(用于进行人机通信).
- 数据要处理,必需从磁盘上读取到主存储器,才可以运行.
- 数据要处理,必需从磁盘上读取到主存储器,才可以运行.
Unix及Linux发展史
- 1965年,贝尔实验室加入一项由通用电气(General Electric)和麻省理工学院(MIT)合作的计划,该计划要建立一套多使用者、多任务、多层次(multi-user,multi-processor,multi-level)的MULTICS操作系统.
- 1970年,被称为"UNIX元年".
- 1973年,C语言的诞生,并且Ken Thompson与Dennis Ritchie成功地用C语言重写了Unix的第三版内核.至此,而Unix和C完美地结合成为一个统一体,C与Unix很快成为世界的主导.
- 1980年,分成两个最主要的Unix的版本线,一个是Berkeley的BSD UNIX,另一个是AT&T的Unix."不再对学生提供源码",收回版权.
- 1984年,Minix操作系统的出现,Andrew S. Tanenbaum荷兰阿姆斯特丹自由大学计算机科学系.(微软自1985年推出Windows 1.0)
- 1984年,GNU(GNU is Not Unix)及GPL(GNU General Public License)及自由软件基金会(Free Software Foundation)
- 1991年10月5日,Torvalds在comp.os.minix新闻组发布完成免费的内核(Freeminix-like kernel sources for 386-AT)--FREAX.Linux操作系统=Linux内核+GNU工具.
- 至此Linux发行版本.slackware(SUSE),debian(ubuntu,mint),redhat(RHEL,CentOS),ArchLinux,Gentoo,LFS,Android..
Linux内核版本号
-
- 可使用uname -r查看内核版本.(下例为CentOS7.6.1810)
- 可使用
cat /etc/redhat-release
查看CentOS版本.其他发行版可查找*release.
操作系统
- OS:Operating System,通用目的的软件程序.
- 硬件驱动
- 进程管理
- 内存管理
- 网络管理
- 安全管理
- 文件管理
- OS分类
- 服务器OS:RHEL,CentOS,Windows Server,AIX...
- 桌面OS:Windows 10,Windows 7,Mac OS,Fedora,ubuntu...
- 移动OS:Andriod,IOS,YunOs...
系统调用
- 应用程序同系统之间的接口.
- 内核Kernel提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户,系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序.
- 其实是为了方便给用户使用,操作系统提供给程序设计人员的一种服务,程序设计人员在编写程序时,可以利用系统调用来请求操作系统的服务.
- 当操作系统接收到系统调用请求后,会让处理器进入内核空间,从而执行诸如I/O操作,修改基址寄存器内容等指令,而当处理完系统调用内容后,操作系统会让处理器返回用户空间,来执行用户代码.
-
用户空间:User space
- 用户程序的运行空间,为了安全,它们是隔离的,即使用户的程序崩溃,内核也不受影响.
- 只能执行简单的运算,不能直接调用系统资源,必须通过系统接口,才能向内核发出指令.
-
内核空间:Kernel space
- 是Linux内核的运行空间.
- 可以执行任何命令,调用系统的一切资源.
-
示例:
str="321" =>用户空间赋值. x=x+100 =>用户空间计算. file.write(str) =>切换到内核空间. y=x+55 =>回到用户空间.
-
开发接口标准
- ABI:Application Binary Interface
- ABI描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行.
- API:Application Programming Interface
- API定义了源代码和库之间的接口,同样的源代码可以在支持这个API的任何系统中编译.
- POSIX:Portable Operting System Interface
- IEEE在操作系统上定义的一系列API标准.
- POSIX兼容的程序可在其它POSIX操作系统编译执行.
- 运行程序格式:
- Windows:EXE,.dll(dynamic link library),.lib
- Linux:ELF,.so(shared object),.a(Linux查看系统调可使用strace及ltrace)
开发语言
- 低级语言:
- 机器语言:0和1
- 汇编语言:和机器语言一一对应,与硬件相关的特有编码,驱动程序开发.
- 中级语言:C
- 高级应用,驱动程序.
- 高级语言:java,C#,python,php,go
- 应用级程序开发.