操作系统——基本概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lsc476782158/article/details/62420125

本文为自己学习《UNIX环境高级编程》而来的学习记录;我的学习方法论是将此书作为工具书来使用,当实际工作中遇到相关的问题针对性地学习知识圆点。

unix基础知识

基础概念

从严格意义上说,可讲操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。

  • 内核
    • 操作系统即为内核(kernel),是运行环境的核心;
  • 系统调用
    • 内核的接口称为系统调用(system call)
  • 共用函数库
    • 共用函数库建立在系统调用接口之上
  • shell
    • 一个特殊的程序,为运行其他应用程序提供了一个接口
  • 应用程序
    • (广义)操作系统包括了内核和一些其他软件这些软件使得计算机能够发挥作用,并使计算机具有自己的特性

unix系统登陆(about shell)

当用户登陆时,某些系统启动一个视窗管理程序,但最终总会有一个shell程序运行在一个视窗中。
shell是一个命令行解释器,它读取用户输入,然后执行命令。shell用户输入通常来自与终端(交互式shell),有时来自于文件(称为shell脚本)。

文件和目录

unix文件系统:目录和文件的一种层次结构,所有东西的起点是称为根(root)的目录,使用字符”/”标示;
文件名:目录中的各个名字称为文件名,斜线和空格字符不能出现在文件名中;
路径名:由斜线分割的一个或多个文件名组成的序列构成的路径名,以斜线开头的路径名即为绝对路径名,否则称之为相对路径名;
工作目录:每个进程都有一个工作目录,所有的相对路径名都从当前工作目录开始解释;
起始目录:登陆时,工作目录设置为起始目录,该起始目录从口令文件中相应用户的登陆项中取得。

输入和输出

  1. 文件描述符
    file descriptor通常是一个小的非负整数,内核以标识一个特定进程正在访问的文件。当内核打开一个现有文件或创建一个新文件时,他都返回一个文件描述符。

  2. 标准输入、标准输出和标准错误
    每当运行一个新程序时,shell都会为其打开3个文件描述符,即标准输入、标准输出和标准错误。重定向

  3. 不带缓冲的IO
    函数open、read、write、lseek以及close提供了不带缓冲的IO;
  4. 标准IO
    标准IO函数都为那些不带缓冲的IO函数提供了 一个带缓冲的接口。

程序和进程

程序,是一个存储在磁盘上某个目录中的可执行文件。内核使用exec函数将程序读入内存,并执行程序。
进程和进程ID,unix系统确保每个进程都有一个唯一的数字标识符,称为进程ID。
进程控制,主要用于进程控制的主要函数fork、exec、waitpid。
线程和线程ID,一个进程内的所有线程共享数据时需要采取同步措施以避免不一致性。与进程相同,线程也用ID标识,但是线程ID只在它所属的进程内起作用。一个进程中的线程ID在另一个进程中没有意义。

信号

信号用于通知进程发生了某种情况。进程处理信号有三种方式:1、忽略信号;2、按系统默认方式处理;3、提供一个函数,系统发生时调用该函数,这被称为捕捉该信号。通过提供自编的函数,我们就能知道什么时候产生了信号,并按期望的方式处理它。

终端键盘上有两种产生信号的方法,分别称为中断键和退出键,它们被用于中断当前运行的进程。
另一种产生信号的方法是(进程的所有者或是超级用户)调用kill函数,在一个进程中调用此函数就可向另一个进程发送一个信号。

时间值

系统调用和库函数

所有操作系统都提供多种服务的入口点,由此程序向内核请求服务。各位种版本的unix实现都提供良好定义、数量有限、直接进入内核的入口点,这些入口点被称为系统调用。
用户进程用标准C调用序列来调用这些函数,然后,函数又用系统要求的技术调用相应的内核服务。例如,函数可将一个或多个C参数送入通用寄存器,然后执行某个产生软中断进入内核的机器指令。
我的理解为,库函数就是使用者将系统调用封装后的产物;系统调用和库函数的关系还体现在,库函数在用户层次管理进程,系统函数则是在内核中实现调用。
应用程序既可以调用系统调用又可以调用库函数。很多库函数则会调用系统调用。系统调用通常会提供一种最小接口。

本文小结

本文对unix系统的基础知识做了简单的概括,主要内容包括:内核、系统调用、shell、共用函数库、应用程序等等。对这些概念的更深层次地理解需要时间和实际经历来加深。

没有更多推荐了,返回首页