一、计算机概念、系统分类、状态
一、理论概念
什么是计算机?为何要有计算机?(参考电影:《模仿游戏》)
说到底,计算机就是人的奴隶,用来替代人力的工具而已。
沟通方式:
人===========人类的语言==========人 (人与人沟通)
人======== ===编程语言===========计算机(人与计算机沟通)
工作的逻辑步骤不变,只是换了沟通的方式(语言),让计算机能听得懂的语言。
什么事编程语言 ? 如 shell、python、go、C等等;
1、把想让计算机做事的步骤想清楚;
2、用一种计算机能听懂的语言(编程语言)把做事的步骤翻译下来。
什么是程序?
通俗地讲,程序就是一堆代码文件;
计算机硬件就是一堆废铁,它的运行全都受程序的控制;
硬件以外的都叫做软件;
软件可分为两大类:/
1、操作系统:操作系统就是一个协调、管理、控制计算机硬件资源与应用软件资源的控制程序;
2、应用软件
二、批处理系统、分时操作系统、实时操作系统
批处理系统:
从字面上理解,就是一批一批的处理人物的一种系统,严格意义,就是指用户将一批作业交给操作系统后就不再干预,由操作系统控制他们自动运行;这样我无需干涉,省了很多力气。
分时操作系统:
“分时”的含义是指多个用户使用同一台计算机,多个程序分时(分时间片)共享硬件和软件资源;即指在一台主机上连接多个带有显示器和键盘的终端,同时允许多个用户通过主机的终端,以交互方式使用计算机,共享主机中的资源;将CPU的时间划分为若干个片段,称为时间片,操作系统以时间片为单位,轮流为每个终端用户服务;
实时操作系统:
及时性:指系统能即时响应外部事件的请求,并在规定时间内完成对该事件的处理;
可靠性,指系统本身要安全可靠,因为像生产过程中的实时控制、航空订票等事实事务系统,信息处理的延误或丢失会带来不堪设想的后果;
三、操作系统发展史与多道技术
1、第一代计算机(1940-1955):真空管和穿孔卡片
特点:没有操作系统的概念,所有的程序设计都是直接操控硬件;
优点:每个人独享,可自己调试代码,找到并解决bug;
缺点:浪费计算机资源;
2、第二代计算机(1955-1965):晶体管和批量处理系统
特点:把代码都攒到一块,让一个CPU共享,但还是一个个的去运行,还是顺序算法(串行);
优点:批处理,节省了时间;
缺点:有人参与就得搬来搬去,太麻烦,拖慢程序运行的速度;
3、第三代计算机(1965-1980):集成电路芯片和多道程序设计
又称多道技术,指多道/多个程序:
1、空间上的复用,内存要支持同时跑进多个程序;
2、时间上的复用,多个程序要让他们能切换(什么时候且?一个程序占用时间过长时、CPU遇到IO阻塞时、等待时间时);
4、第四代计算机(1980-至今):个人计算机
操作系统的两大作用:
1)为应用程序提供如何使用硬件资源的抽象
2)把多个程序对硬件的竞争变得有序化(管理应用程序)
四、计算机的语言分类
机器语言→汇编语言→高级语言
机器语言:也称低级语言(因为离计算机硬件最近最低),是由0和1的二进制数来表达;
特点:用计算机能看懂的二进制语言(1和0)去写程序;
优点:程序运行速度快;
缺点:开发效率极低;
汇编语言:在机器语言基础上诞生的一门语言,简洁的英文字母、符号串代替二进制串;
特点:用一些英文标签代替一串二进制数字去写程序;
优点:比机器语言好一点,操作系统使用大量汇编语言(系统无须联网,速度越来越好);
缺点:开发效率低;
高级语言:如C、C++、Java、shell、python、GO、等等;
特点:用人能读懂的(英文)字符串去写程序;
优点:开发效率高;
缺点:需经过翻译计算机才能识别,导致运行速度慢;
结论:开发效率从低到高,运行速度从低到高,学习难度由难到易;
五、任务运行的三种状态
进程执行的“时间断性”决定了进程可能具有多种状态
1、就绪:某些进程“万事俱备”(必要资源),只差CPU,处于就绪队列状态;
2、执行:某些进程战友CPU并在CPU上执行其程序;
3、阻塞:某些进程由于某种原因不能继续运行下去,等待处理问题,称为等待/封锁状态,如I/O(多个等待排队)
三种状态随着执行和条件变化而发生转换:
进程状态转换的原因:
1)就绪→执行:
对就绪状态的进程,当进程跳读程序按一种选定的策略从中选中一个就绪进程,位置分配了处理机后,该进程便由就绪状态改变为执行状态;
2)执行→阻塞:
正在执行的进程因发生某等待事件而无法运行,则进程由执行状态变为阻塞状态;
3)阻塞→就绪:
处于阻塞状态的进程,在其等待的事件已经完成,如输入/输出完成,资源得到满足或错误处理完毕时,处于等待状态的进程并不马上转入执行状态,而是先转入就绪状态,然后再由系统进程调度程序在适当时将该进程转为执行状态;
4)执行→就绪:
正在执行的进程,因时间片用完而被暂停执行,或在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行而被迫让出处理机时,该进程便由执行状态转变为就绪状态;
任务的同步方式:同步、异步
同步:调用一旦开始,调用者必须等待方法执行完成,才能继续执行后续方法;
异步:方法一旦开始,立即返回,调用者无须等待其中方法执行完成,即可继续执行后续的方法;
举例:
1、和朋友去吃饭,点了一桌菜,饿得不行,但还是得坐着,等待厨师做菜,等菜上桌后,吃完付钱,才能和朋友去逛街购物,所以说,当前做的事做完,才能做下一件事,这就是同步调用;
2、手机打开美团外卖,点餐付费;之后继续玩转淘宝购物,不一会外卖送到了,还没耽误网购,这就是异步调用;
Linux系统目录结构
目录 | 说明 |
/ | 处于Linux系统树形结构的顶端,它是Linux文件系统的入口,所有的目录、文件、设备都在/之下 |
/bin | Bin是Binary的缩写。常用的二进制命令目录。比如ls、cp、mkdir、cut等;和/usr/bin类似,一些用户级gun工具 |
/boot | 存放系统启动相关的文件,例如:kernel.grub(引导装载程序) |
/dev | dev是Device的缩写。设备文件目录,比如声卡、磁盘。在Linux中一切都被看做文件,包括终端设备、磁盘等等 设备文件:/dev/sda,/dev/sda1./dev/tty1,/dev/tty2,/dev/pts/1, /dev/zero,/dev/null,/dev/cdrom |
/etc | 常用系统或二进制安装包配置文件默认路径和服务器启动命令目录 passwd 用户信息文件 shadow 用户密码文件 group 存储用户组信息 fstab 系统开机自动挂载分区列表 hosts 设定用户自己的IP与主机名对应信息 |
/home | 普通用户默认的家目录 |
/lib | 库文件存放目录,函数库目录 |
/lost+found 只在CentOS6中有 | 默认为空,被FSCK(file system check用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题, 可利用fsck命令对文件系统进行检查)用来放置零散文件(没有名称的文件)当系统非法关机后,这里就会存放一些文件。 在 centos6 版本下,每个分区的挂载点下会有些目录 |
/mnt /media | 一般用来临时挂载存储设备的挂载目录,比如cdrom、U盘等目录 |
/opt | 表示的是可选择的意思,有些软件包也会被安装在这里 |
/proc | 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如CPU、硬盘分区、内存信息等)存放在这里。/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统。因此,这个目录是一个虚拟目录,它是系统内存的映射,我们可以通过直接访问这个文件来获取系统信息。也就是说,这个目录的内存不再硬盘上而是在内存里。 查看CPU信息 cat /proc/cpuinfo |
/sys | 系统目录,存放硬件信息的相关文件 |
/run | 运行目录,存放的是系统运行时的数据,比如进程的PID文件 |
/srv | 服务目录,存放的是我们本地服务的相关文件 |
/sbin | 大多数涉及系统管理的命令都存放在该目录中,它是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,凡是目录sbin中包含的命令都是root权限才能执行的。 |
/tmp | 用于存放临时文件,又是用户运行程序的时候会产生一些临时文件。/tmp就是用来存放临时文件的。/var/tmp目录和该目录的作用是类似的,不能存放重要数据,它的权限比较特殊。 [xf@xuexi ~]$ ls -ld /tmp drwxrwxrwt. 27 root root 4096 12月 23 19:18 /tmp t粘滞位(sticky bit)目录的sticky位表示这个目录里的文件只能被owner和root删除 |
/var | 系统运行和软件运行时产生的日志信息,该目录的内容是经常变动的,存放的是一些变化的文件。比如 /var/log目录用来存放系统日志,还有/var/mail、/var/spool/cron |
/usr | 存放应用程序和文件 /usr/bin 普通用户使用的应用程序 /usr/sbin 管理员使用的应用程序 /usr/lib 库文件Gli bc(32位) /usr/lib64 库文件Glibc |
/lib /lib64 都在/usr/目录下 | 这个目录里存放着系统最基本的动态链接共享库,白喊许多倍/bin和/sbin中的程序使用的库文件,目录/usr/lib中含有更多用于用户程序的库文件。作用类似于windows里的dll文件,几乎所有的应用程序都需要用到这些共享库 注:lib***.a是静态库222 Lib***.so是动态库 静态库在编译时被加载到二进制文件中 动态库在运行时加载到进程的内存空间中 简单的说:这些库视为了让你的程序能过正常编译运行的 |