第一个不使用汇编语言编写的系统:MCP,用于Burroughs计算机的主控程序(ALGOL)。
MS-DOS中并没有很好的区分接口和功能层次。这种任意性使得简单结构的操作系统易受错误程序伤害,从而导致整个系统的崩溃。
分层的困难在于对层的详细定义。缺点是效率相比较差。
LINUX操作系统使用
一、Linux系统结构
*宏操作系统结构
MEMO:LINUX的文件系统为VFS
LINUX系统的文件系统构成:
在系统启动后,进入系统所能观察到的就是一系列目录(使用ls或dir)。Linux 系统根目录下包含(不同的发行版会有所区别):
- bin:该目录存放最常用的基本命令,比如拷贝命令cp、编辑命令vi、删除命令rm等。
- boot:该目录包含了系统启动需要的配置文件、内核(vmliuxz)和系统镜像(initrd….img)等 。//ubuntu存在自己的专门分区目录
- dev:该目录下存放的是Linux中使用或未使用的外部设备文件(fd代表软盘,hd代表硬盘等),使用这些设备文件可以用操作文件的方式操作设备。//网络设备
- etc:该目录下包含了所有系统服务和系统管理使用的配置文件;比如系统日志服务的配置 文件syslog.conf,系统用户密码文件passwd等
- home:该目录下包含了除系统管理员外的所有用户的主目录,用户主目录一般以用户登陆帐 号命名。
- lib:该目录下包含了系统使用的动态连接库(*.so)和内核模块(在modules下)。
- host+found:该目录包含了磁盘扫描检测到的文件碎片,如果你非法关机,那么下次启动时 系统会进行磁盘扫描,将损坏的碎片存到该目录下。
- mnt:该目录下包含用户动态挂载的文件系统。如果要使用光盘,U盘都一般应该将它们安装 到该目录下的特定位置。
- proc:该目录属于内存影射的一个虚拟目录,其中包含了许多系统现场数据,比如进程序 数,中断情况,cpu信息等等,它其中的信息都是动态生成的,不在磁盘中存储。
- root:该目录是系统管理员(root用户)的主目录。
- sbin:该目录下包含系统管理员使用的系统管理命令,比如防火墙设置命令iptable,系统停机 命令halt等 tmp:该目录下包含一些临时文件。
- usr:该目录下一般来说包含系统发布时自带的程序(但具体放什么东西,并没有明确的要 求),其中最值得说明的有三个子目录
- /usr/src :Linux内核源代码就存在这个目录
- /usr/man :Linux中命令的帮助文件
- /usr/local : 新安装的应用软件一般默认在该目录下
- var:该目录中存放着在不断扩充着的信息,比如日志文件。
MEMO:linux drwxr-xr-x 是什么意思?
第一位表示文件类型。d是目录文件,l是链接文件,–是普通文件,p是管道。
后面的分三个三个来看,即 rwx 、r-x 、r-x。
第一个: root :r 是可读,w 是可写,x 是可执行,rwx 意思是可读可写可执行。
第二个: 一般用户(用户组):r-x 是可读可执行不可写。
第三个: 其他用户,r-x 是可读可执行不可写。
综合起来就是权限设置为:文件所有者(root)可读可写可执行,与文件所有者同属一个用户组的其他用户可读可执行,其它用户组可读可执行。
二、Linux编程
1.Linux编辑器
- 命令行方式
- vi (vim): 最令UNIX类操作系统初学者裹足不前的editor,然而只要你习惯于操作,你会觉得它比任何的editor都好用,且功能强大。
- emacs: linux编辑器,功能强大的全屏幕编辑器。
- X-window
- gedit、kedit 全屏幕文本编辑程序
- emacs 编程编辑器
- 各种发行版都有各自的编辑器
2.shell程序设计(第八章)
3.gcc
GNU CC(简称为gcc,GNU compiler collection)是GNU项目中符合ANSI C标 准的编译器集合,能够编译用C、C++和Object C等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal 、Modula-3和Ada等多种语言,而且gcc又是一个交叉平台编译器,它能够在当 前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入 式领域的开发编译。
- gcc命令
- 语法:gcc [选项] 文件列表
- 常用选项/功能: -c 编译成目标(.o)文件 -l 库文件名 连接库文件 -o 文件名 将生成的可执行文件保存到指定文件中,默认是a.out
三、LINUX开发工具
1.make工具
一个命令工具,一个解释makefile中指令的命令工具。
2.gdb
内核模块
MEMO:什么是内核模块?
模块在内核模式运行,实际上是一种目标对象文件, 没有链接,不能独立运行,但是其代码可以在运行时链接到系统中作为内核的一部分运行或从内核中取下, 从而可以动态扩充内核的功能。这种目标代码通常由一组函数和数据结构组成,如用来实现一种文件系统、一个驱动程序或其他内核上层功能。
内核模块完整叫法:动态可加载内核模块(Loadable Kernel Module LKM)
- 优点:
- 使得内核更加紧凑和灵活。
- 修改内核时,不必全部重新编译整个内核。系统如果需 要使用新模块,只要编译相应的模块,然后使用insmod 将模块插入即可。
- 模块不依赖于某个固定的硬件平台。
- 模块的目标代码一旦被链接到内核,它的作用域和静态链接的内核目标代码完全等价。
- 缺点:
- 由于内核所占用的内存是不会被换出的,所以链接进内核的模块会给整个系统带来一定的性能和内存利用 方面的损失。
- 装入内核的模块就成为内核的一部分,可以修改内核中的其他部分,因此,模块的使用不当会导致系统崩溃。
- 为了让内核模块能访问所有内核资源,内核必须维护符号表,并在装入和卸载模块时修改符号表。
- 模块会要求利用其它模块的功能,所以,内核要维护模块之间的依赖性。
进程
*堆栈的作用都是一样的
1.三个基本状态之间可能转换和转换原因如下:
- 就绪→运行:当处理机空闲时,进程调度程序必将处理机分配给一个处于就绪状态的 进程 ,该进程便由就绪状态转换为运行状态。
- 运行→等待:处于运行状态的进程在运行过程中需要等待某一事件发生后(例如因I/ O请求等待I/O完成后),才能继续运行,则该进程放弃处理机,从运行状态转换为 等待状态。
- 等待→就绪:处于等待状态的进程,若其等待的事件已经发生,于是进程由等待状态 转换为就绪状态。
- 运行→就绪:处于运行状态的进程在其运行过程中,因分给它的处理机时间片已用完 ,而不得不让出(被抢占)处理机,于是进程由运行态转换为就绪态。
- 等待→运行,就绪→等待这二种状态转换一般不可能发生。
2.进程与状态机
- 处于运行状态进程:如系统有一个处理机,则在任何一时刻,最多只有一个 进程处于运行状态。
- 处于就绪状态进程:一般处于就绪状态的进程按照一定的算法(如先来的进 程排在前面,或采用优先权高的进程排在前面)排成一个就绪队列。
- 处于等待状态进程:处于等待状态的进程排在等待队列中。由于等待事件原 因不同,等待队列也可以按事件分成几个队列。
3.进程与程序的区别
- 进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。
- 进程是暂时的,程序的永久的:进程是一个状态变化的过程,程序可长久保存。
- 进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。
- 进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
4.Process Control Block (PCB,进程控制块)
5.调度进程 scheduler
三种调度程序
长期调度程序(long-term)
作业调度程序(job)
MEMO:长期调度程序和作业调度程序从缓冲池中选择进程,并装入内存中以准备执行。
短期调度程序(short-term)
MEMO:短期调度程序或CPU调度程序从准备执行的进程中选择进程,并为之分配CPU。
进程包括IO进程、CPU进程。长期调度程序应该选择一个合理的包含I/O为主的和CPU为主的组合程序。
6.上下文切换context switch
*好的操作系统需要减少上下文切换的频率
MEMO:Android&IOS的多进程管理
安卓机前台只有一个,允许后台运行很多进程作为服务(service),服务没有前台,使用很小的内存。
苹果机前台可以开一/两个窗口,允许后台运行使用内存,但后台如果运行时间过长,会被kill掉。
0 条评论