Skip to content

Latest commit

 

History

History

Linux_OS

操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。计算机操作系统是随着计算机研究和应用的发展逐步形成并发展起来的,它是计算机系统中最基本的系统软件。

操作系统是一种系统软件,但与其他的系统软件和应用软件有很大的不同,它有自己的特殊性即基本特征。操作系统的基本特征包括并发、共享、虚拟和异步。

为了给多道程序提供良好的运行环境,操作系统应具有以下几方面的功能:处理机管理、存储器管理、设备管理和文件管理。为了方便用户使用操作系统,还必须向用户提供接口。

操作系统分为批处理系统,分时操作系统,实时操作系统,分布式操作系统等。

操作系统更多概念性内容参考 Concept

Linux 是一个多用户多任务的操作系统,也是一款自由软件,完全兼容POSIX标准,拥有良好的用户界面,支持多种处理器架构,移植方便。Linux 中有大量常用的命令,可以方便我们快速进行操作,值得花时间去掌握。

Linux 常用命令参考 Command

进程与线程

在多道程序环境下,允许多个程序并发执行。为此引入了进程(Process)的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性。简单来说,进程是对正在运行的程序的一个抽象。一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值。

线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。

fork 输出个数
进程和线程描述
线程共享的资源
线程并发脏数据
进程轮询调度周转时间

关于进程、线程的更多内容参见 ProcessThread

进程间通信

进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。

系统进行进程间通信(IPC)的时候,可用的方式包括管道、命名管道、消息队列、信号、信号量、共享内存、套接字(socket)等形式。

更多内容参考 IPC

守护进程

守护进程,也即通常所说的 Daemon 进程,是 Linux 下一种特殊的后台服务进程,它独立于控制终端并且周期性的执行某种任务或者等待处理某些发生的事件。守护进程通常在系统引导装入时启动,在系统关闭时终止。Linux 系统下大多数服务都是通过守护进程实现的,守护进程的名称通常以 d 结尾,如 httpd、crond、mysqld等。

从终端 Shell 启动守护进程的步骤如下:

  1. 创建子进程,父进程退出
  2. 子进程创建新会话
  3. 改变当前工作目录
  4. 重设文件权限掩码
  5. 关闭文件描述符

守护进程的详细内容参见 Daemon.

fork 函数

fork()系统调用是Unix下以自身进程创建子进程的系统调用,一次调用,两次返回,如果返回是0,则是子进程,如果返回值>0,则是父进程(返回值是子进程的pid)。

关于 Fork 更多内容,参见 Fork

内存管理

随着计算机硬件的飞速发展,内存容量也在不断增长,但是仍然不可能将所有用户进程和系统所需要的全部程序和数据放入主存中,所以操作系统必须将内存空间进行合理地划分和有效地动态分配。操作系统对内存的划分和动态分配,就是内存管理的概念。

连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。

非连续分配允许一个程序分散地装入到不相邻的内存分区中,根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。

现代系统为了更好地管理存储器并且保证安全,提供了一种对主存的抽象概念,叫做虚拟存储器。虚拟存储器提供了三个重要的能力:

  • 它将内存看为是磁盘的高速缓存,在内存中只保存活跃的区域,并根据需要在内存和磁盘中来回传送数据,使得主存的使用更加高效。
  • 它为每个进程抽象出了一致的内存空间,使得多进程可以更加简单的运行,简化了存储器的管理。
  • 它保护了每个进程可以单独、高效的运行,每个进程的地址空间不会被其他进程破坏。

虚拟内存的实现有以下三种方式:

  • 请求分页存储管理。
  • 请求分段存储管理。
  • 请求段页式存储管理。

更多内容参见 MemoryManage

内存堆与栈

堆和栈是两种内存分配的两个统称。可能有很多种不同的实现方式,但是实现要符合几个基本的概念:

  1. 对栈而言,栈中的新加数据项放在其他数据的顶部,移除时也只能移除最顶部的数据(不能越位获取)。
  2. 对堆而言,数据项位置没有固定的顺序。你可以以任何顺序插入和删除,因为他们没有“顶部”数据这一概念。

栈空间分布,printf 函数参数

更多内容,参见 StackHeap

IO 模型

Unix 下有5种可用的 I/O 模型,如下:

  • 阻塞式 I/O
  • 非阻塞式 I/O
  • I/O 复用(select 和 poll)
  • 信号驱动 I/O
  • 异步I/O

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,实现单进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的(异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间)。

epoll和select

更多内容参见: IO_Model

文件系统

文件(File)是操作系统中的一个重要概念。在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中,则以文件为基本单位。大多数应用程序的输入都是通过文件来实现的,其输出也都保存在文件中,以便信息的长期存及将来的访问。

当用户将文件用于应用程序的输入、输出时,还希望可以访问文件、修改文件和保存文件等,实现对文件的维护管理,这就需要系统提供一个文件管理系统,操作系统中的文件系统(File System)就是用于实现用户的这些管理要求。

文件软链接描述
磁盘存储优化

更多内容参见 FileSystem

其他内容

其他相关的内容:

  • Linux 启动流程
  • Linux core文件
  • 数值的存储

更多内容参考 Others

更多阅读

《现代操作系统》
可执行链接格式 ELF