linux基本概念

操作系统必须完成的两个主要目标

  • 与硬件部分进行交互,为包含在硬件平台上的所有底层可编程部位提供服务
  • 为运行在计算机系统上的应用程序(用户进程)提供执行环境

类Unix操作系统把计算机物理组织相关的底层细节都对用户运行的程序封装起来,当程序想要使用硬件资源时,必须向操作系统发出一个请求,内核对这个请求评估,如果允许使用这个资源,内核代表应用程序与相关的硬件部分进行交互。

硬件为CPU引入了至少两种执行模式,用户程序的非特权模式内核的特权模式,分别称为用户态内核态

当一个程序在用户态下执行时,它不能直接访问内核数据结构或内核的程序,内核态时没有这些限制。每种CPU模型都为这从用户态到内核态的转换提供了特殊的指令。

内核态被激活的几种情况

  1. 系统调用
  2. 正在执行进程的CPU发出一个异常信号,例如一个无效的指令,内核代表异常的进程处理异常
  3. 外围设备向CPU发送一个终端信号以通知一个事件的发生,如一个要求注意的请求,一个状态的变化或一个I/O操作已经完成等。每个中断信号都是由内核种的中断处理程序来处理的。
  4. 内核线程被执行

内核控制路径:表示内核处理系统调用,异常或终端所执行的指令序列

可重入内核:若干个进程可以同时在内核态下执行,几个内核控制路径可以轮流执行。

任何类Unix操作系统都有一个特殊的用户,叫做root,超级用户,可以访问系统中的每一个文件,能干涉每一个正在执行的用户程序的活动。

程序:一组指令的有序集合
进程:程序执行时的一个实例,一个运行程序的执行上下文;进程是具有一定独立功能的程序关于某个数据上的一次运行活动,是系统进行资源分配和调度的独立单位。
线程:线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位,线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源,一个线程可以创建和撤销另一个线程。
地址空间:允许进程引用的内存地址集合

进程/线程和程序的区别

  1. 进程可以并发地执行同一程序,统一进程能顺序地执行几个程序。程序本身没有任何运行的含义,是一个静态的实体,而进程是程序在某个数据集上的执行,进程是一个动态的实体,有生命周期,反映了一个程序在一个数据集上运行的全部动态进程。进程和程序之间不是一一对应的,一个程序执行在不同数据集上就成为了不同的进程,一个进程肯定有一个与之对应的程序,而且只有一个,程序可能没有与之对应的进程(没执行),也有可能有多个进程与之对应(运行在不同的数据集上)
  2. 进程拥有独立的地址空间,线程没有独立的地址空间,同一进程内多个线程共享其资源
    一个程序至少有一个进程,一个进程至少有一个线程,一个进程至少有一个主线程。

允许进程并发活动的系统成为多道程序系统多处理系统

进程地址空间:每个进程运行在它的私有空间,但有时进程之间也分享部分地址空间,可以由进程显式提出,也可以由内核自动完成共享以节约时间

原子操作:对全局变量的安全访问通过原子操作来保证。进入临界区的进程必须完成之后,另一个进程才可以进去

每个进程都有一个进程描述符,包含有关进程当前状态的信息,当内核暂停一个进程的执行时,就把几个相关处理器寄存器的内容保存在进程描述符中,寄存器包括程序计数器(PC)栈指针(SP)寄存器,通用寄存器,浮点寄存器,包含CPU状态信息的处理器控制寄存器,用来跟踪进程对RAM访问的内存管理寄存器。当内核决定恢复执行一个进程时,它用进程描述符中合适的字段来装载CPU寄存器。

索引节点:文件系统处理文件需要的所有信息都在一个名为索引节点的数据结构中,每个文件都有自己的索引节点,文件系统用索引节点来标识文件。

块设备:I/O设备中的一类,将信息存储在固定大小的块种,每个块有自己的地址,还可以在块设备的任意地址读取数据,例如硬盘,U盘,SD卡

I/O设备分为两大类:块设备字符设备,磁盘是最常见的块设备

现在的CPU包含能自动把虚拟地址转换成物理地址的硬件电路,为了达到这个目标,把可用的RAM划分成长度为4KB或者8KB的页框,并引入一组页表来指定虚拟地址和物理地址之间的关系,一块连续的虚拟地址请求可以分配一组非连续的物理地址页框

sync():系统调用把所有“脏”缓冲区(即缓冲区的内容与对应磁盘块的内容不一样)写入磁盘来强制磁盘同步,为了避免数据丢失,所有的操作系统都会注意周期性地把脏缓冲区写回磁盘

Linux操作系统重要特点时它支持许多不同类型的文件系统,最普遍的时Ext2,同时也支持其他不同类型的文件系统。

虚拟文件系统(VFS):隐藏各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现分离,为所有设备提供了统一的接口,虚拟文件系统分为逻辑文件系统和设备驱动程序。

你可能感兴趣的:(linux基本概念)