1. 内核:管理和分配计算机资源(即CPU、RAM和设备)的核心软件层
  2. Linux内核可执行文件采用/boot/vmlinuz或类似的路径名,“z”表明内核是经过压缩的可执行文件。
  3. 内核主要任务:

(1)进程调度:Linux属于抢占式多任务系统,多个进程(即运行中的程序)可同时驻留于内存,都能获得对CPU的使用权

(2)内存管理:以高效、公平地方式在进程之间共享这一资源,Linux采用了虚拟内存管理机制。

虚拟内存管理机制优势:

a. 进程与进程之间、进程与内核之间彼此隔离;一个进程无法读取或修改内核或掐他进程的内存内容

b. 只需将进程的一部分保持在内存中,降低了每个进程对内存的需求量,使得可以在内存中加载更多的进程。

(3)提供了文件系统:内核在磁盘上提供有文件系统,允许对文件执行创建、获取、更新、删除等操作

(4)创建和终止进程:内核可以将新进程载入内存,为其提供运行所需的资源(CPU、RAM以及对文件的访问)。

一旦进程执行完毕,内核需要确保释放其占用的资源,以供或许进程使用

(5)对设备的访问:计算机外接设备(鼠标、键盘、磁盘等),可实现计算机与外部世界的通信。

内核为进程提供了访问设备的标准接口,同时还仲裁多个进程对同一个设备的访问。

(6)联网:内核以用户进程的名义收发网络消息(数据包),同时将该数据包路由至目标系统。

(7)提供系统调用API:进程可以利用系统调用API,请求内核去执行各种任务。

  1. 用户态和核心态

(1)CPU一般在这两种不同状态下运行,执行硬件指令可使CPU在两种状态来回切换

(2)虚拟内存区域划分为:用户空间部分、内核空间部分

(3)用户态下运行时,CPU只能访问被标记为用户空间的内存,试图访问内核空间的内存,将会引发硬件错误

(4)核心态下运行时,CPU既能访问用户空间的内存,又能访问内核空间的内存。

(5)CPU在核心态下运行时,可以执行特殊操作。如宕机(halt)、访问内存管理硬件、设备I/O操作的初始化

  1. 交换区:磁盘空间中的保留区域,作为RAM的补充---进程可被保存至交换区
  2. 内核维护的底层数据结构,可将进程使用的文件名称转换为磁盘的物理位置
  3. 内核维护每个进程的虚拟内存与计算机物理内存及磁盘交换区之间的映射关系。
  4. 某进程可创建另一个进程---真正含义:某进程可以请求内核创建另一个进程。(因进程间所有通信都需要内核提供的通信机制完成)
  5. shell(命令解释器):用于读取用户输入的命令,并执行相应的程序以响应命令。

(1)登陆shell:用户刚登陆系统时,由系统创建,用以运行shell的进程。

(2)对于UNIX系统而言,shell只是一个用户进程。

(3)登陆同一台计算机的不同用户同时可以使用不同的shell(就单个用户来说,情况也一样)

(4)shell设计两个目的:a. 人机交互; b. 解释shell脚本(包含shell命令的文本文件)

(5)shell内置有许多通常与编程语言相关的功能:包括变量、循环、条件语句、I/O命令、函数等

(6)几种重要的shell:

a. Bourne shell(sh):历史最为悠久,曾是UNIX第七版标配的shell,包含许多常见特性:I/O重定向、管道、文件名生成(通配符)、

变量、环境变量处理、命令替换、后台命令执行、函数等。

b. C shell(csh):曾经时BSD系统的标配,但与Bourne shell并不兼容,为了保证在UNIX系统的移植性,人们更倾向使用Bourne shell。

c. Korn shell(ksh):AT&T贝尔实验室编写,是Bourne shell的继任者,同时吸收了C shell的很多交互特性

d. Bourne again shell(bash):GNU项目对于Bourne shell的重新实现,同时提供了与Korn shell和C shell类似的交互特性。

在Linux上Bourne shell正是由Bourne again shell仿真提供的

  1. 超级用户:用户ID为0,通常登录名为root
  2. 用户密码文件/etc/passwd:包含用户名、用户ID(UID)、组ID、主目录、登陆shell
  3. 用户组文件/etc/group:组名、组ID(GID)、用户列表(隶属于该组的用户登录名列表)
  4. 为了访问文件,用户分为3类:文件(属主)的用户;文件用户同一组的用户;其他用户
  5. 由Shell启动的进程会继承3个已打开的文件描述符:描述符0为标准输入;描述符1为标准输出;描述符2为标准错误。
  6. 在stdio函数库中,这几种描述符分别与文件流stdin,stdout,stderr相对应
  7. C语言标准库的I/O函数(stdio函数库):fopen,fclose,scanf,printf,fgets,fputs     stdio函数位于I/O系统调用层(open,close,read,write 等)之上。
  8. 过滤器:从stdin读取输入,加以转换,再将转换后的数据输出到stdout,常将拥有上述行为的程序称为过滤器,如cat、grep、tr、sort、wc、sed、awk
  9. 逻辑上将一个进程划分为以下几个部分(也称为段)

(1)文本:程序的指令

(2)数据:程序使用的静态变量

(3)堆:程序可以从该区域动态分配额外内存

(4)栈:随函数调用、返回而增减的一片内存,用于为局部变量和函数调用链接信息分配存储空间。

19.子进程从父进程处继承数据段、栈段、堆段的副本后,可以修改这些内容,不影响父进程的“原版”内容。

  1. 有两种方式可以终止一个进程:其一,进程使用_exit()系统调用(或相关的exit()库函数),请求退出;其二,向进程传递信号,将其“杀死”。
  2. 进程的“终止状态”,一个非负小整数,可供父进程的wait()系统调用检测。
  3. 终止状态为0表示进程“功成身退”,非0表示有错误发生。
  4. 大多数shell会将前一执行程序的终止状态保存于shell变量$?中。
  5. init进程:系统引导时,内核创建,是“所有进程之父”,该进程相应的程序文件为“/sbin/init”,init的进程号为1,总以超级用户权限运行。谁(哪怕是超级用户)都不能“杀死”init进程,只有关闭系统才能终止该进程。init的主要任务是创建并监控系统运行所需的一系列进程。
  6. 进程间通信(IPC)机制:

(1)信号(signal),用来表示事件的发生

(2)管道(亦即shell用户所熟悉的“|”操作符)和FIFO,用于在进程间传递数据

(3)套接字,供同一台主机或是联网的不同主机上所运行的进程之间传递数据。

(4)文件锁定,为防止其他进程读取或更新文件内容,允许某进程对文件的部分区域加以锁定

(5)消息队列:用于在进程间交换消息

(6)信号量(semaphore):用来同步进程动作

(7)共享内存:允许两个及两个以上进程共享一块内存。当某进程改变了共享内存的内容时,其他所有进程会立即了解到这一变化。

26.内核、其他进程(只要有相应的权限)或进程自身均可向进程发送信号。

  1. 发生下列情况之一时,内核可以向进程发送信号:

(1)用户键入中断字符(通常为Ctrl+C)

(2)进程的子进程之一已经终止

(3)由进程设定的定时器(告警时钟)已经到期。

(4)进程尝试访问无效的内存地址。

28.在shell中,可使用kill命令向进程发送信号;在程序内部,系统调用kill()可提供相同的功能。

  1. 收到信号时,进程会根据信号采取如下动作之一:忽略信号;      被信号“”杀死;     先挂起,之后再被专用信号唤醒。
  2. 多个线程之间,共享同一数据区域和堆,每个线程拥有属于自己的栈。线程之间可以通过共享的全局变量进行通信。
  3. shell执行的每个程序都会在一个新进程内发起。比如,shell创建了3个进程来执行以下管道命令(在当前的工作目录下,根据文件大小对文件进行排序并显示):ls -l | sort -k5n | less
  4. 伪终端:是一对相互连接的虚拟设备,也称为主从设备。在这对设备之间,设有一条IPC信道,可供数据进行双向传递。telnet和ssh都属于伪终端。

Linux编程手册读书笔记第二章(20140330)相关推荐

  1. linux编程手册读书笔记第一章(20140329)

    (2)管道.FIFO.套接字.设备(比如终端.伪终端)都支持非阻塞模式.(因为无法通过open()来获取管道和套接字的文件描述符.所以要启用非阻塞标志,就必须使用fcntl()的F_SETFL命令) ...

  2. Linux编程手册读书笔记第三章(20140407)

    外壳函数执行一条中断机器指令(int 0x80),引发处理器从用户态切换到核心态,并执行系统中断0x80的中断矢量所指向的代码.(在2.6内核及glib 2.3.2之后的版本都支持sysenter指令 ...

  3. Linux编程手册读书笔记第五章(20140408)

    改变已打开文件性质:fcntl() #include<fcntl.h> int fcntl(int fd, int cmd, -); (1)  调用失败返回-1 (2)fcntl函数有5种 ...

  4. Linux编程手册读书笔记第四章(20140407)

    标准文件描述符定义在<unistd.h>中,STDIN_FILENO,  STDOUT_FILENO,  STDERR_FILENO 打开一个文件:open() #include<s ...

  5. 《计算传播学导论》读书笔记——第二章文本分析简介

    <计算传播学导论>读书笔记--第二章文本分析简介 第一节 文本分析研究现状 常用文本挖掘技术 第二节 文本分析与传播学研究 (一)为什么文本挖掘技术逐渐受到传播学者的关注 (二)不同文本分 ...

  6. 【编程珠玑】读书笔记 第二章 算法

    2013-07-11 22:00:28 第二章 算法 本章围绕三个问题进行算法讨论,包括元素的查找.字符串的旋转.以及变位词的查找. 下面给出了实现代码.以及测试结果. 问题一 查找不存在的元素 思路 ...

  7. C++ Primer Plus读书笔记第二章

    自学了一段时间的C++打算还是要系统的整理一下一些知识点,让学习思路更清晰,不然老是学一点忘一点,这个读书笔记用来记录这段时间对C++ Primer Plus一书中知识点的记录,尽量会写的详细一点.直 ...

  8. In-memory Computing with SAP HANA读书笔记 - 第二章:SAP HANA overview

    本文为In-memory Computing with SAP HANA on Lenovo X6 Systems第二章SAP HANA overview的读书笔记. 本章最重要的部分是SAP HAN ...

  9. 《软件测试经验与教训》读书笔记---第二章

    <软件测试经验与教训>读书笔记--目录 第一章 测试员的角色 第二章 按测试员的方式思考 第三章 测试手段 第四章 程序错误分析 第五章 测试自动化 第六章 测试文档 第七章 与程序员交互 ...

最新文章

  1. 如何理解高光谱图像数据
  2. 【数字信号处理】LTI 系统因果性与稳定性示例 ( 示例一 | 示例二 )
  3. 基于数据挖掘的旅游推荐APP(一):开篇
  4. Memcached安装
  5. 测试驱动开发 测试前移_测试驱动开发–双赢策略
  6. el-table表格格式化某一列数据;统一处理el-table表格某一列数据
  7. tde数据库加密_启用了基于透明数据加密(TDE)的地理复制的Azure SQL数据库
  8. 【VS】项目属性配置(上)
  9. java应用安全设计_应用层安全架构设计-访问控制
  10. Asp.Net MVC2 控件开发实例(2)
  11. 2013年微博营销最成功案例
  12. 互联网软件开发和传统软件开发的不同(转型互联网开发需要适应的那些事)
  13. oc 管理工具 黑苹果 下载_灵越7590黑苹果(win10下)
  14. 从一个简单的数学题来说说偷换概念引发的催眠效应
  15. 关于《论文写作》课程的心得和体会
  16. 关于H5中的Canvas API的探索
  17. 超级马里奥项目设计(一)
  18. aso是做什么的_ASOer的目标
  19. 轻松学会WiFi模块(ESP8266)—基于STM32,学到就是赚到!
  20. STM32单片机RGB红蓝调光植物补光系统红光蓝光PWM调色调节亮度

热门文章

  1. C# MVC IOC、依赖注入
  2. 二叉树的递归遍历与复制
  3. 【C++第一个Demo】---控制台RPG游戏3【登陆菜单树】
  4. [Algorithm] 字符串匹配算法——KMP算法
  5. 以太网 数据包速率计算方法
  6. 字体Times New Roman
  7. 英语基础语法(八)-时态
  8. php 内部异步执行顺序,event_loop中不同异步操作的执行顺序
  9. 本地方法栈线程公有_Java运行时区域,哪些区域是线程私有的?哪些是共有的?...
  10. 上传文件到华为云云服务器,上传文件到云服务器