linux系统程序设计(理论课10天,项目7天)
学习方法:1、交流 2、练习 3、不求甚解
C库封装了系统调用函数
第一章
一、基本构成
存储器地址寄存器MAR:
确定下一次读写的存储器地址
存储器缓冲寄存器MBR:
包含要写入存储器的数据或从存储器中读取的数据
输入输出地址寄存器i/o AR:
确定一个特定的输入输出设备
输入输出缓冲寄存器I/O BR:
用于在输入输出模块和处理器之间交换数据
程序计数器PC:
将取指令的地址
指令寄存器IR:
最近取的指令内容
程序状态字PSW:
包含条件码和状态信息
指令生命周期:
取指令->放置在指令寄存器->处理器解释指令并执行操作->PC保存下一次取指的地址
多级存储器的层次结构成功的关键:
处理器访问存储器的频率递减
操作系统提供的服务:
程序开发、程序运行、io设备访问、文件访问、系统访问、错误检测、审计
执行上下文(又叫进程状态):
包括各种处理器寄存器的内容,如PC和数据寄存器,进程优先级以及进程是否等待IO事件
进程:由上下文,数据,程序组成。进程状态包含在它的上下文中
二、linux可加载模块的两个重要特征:
1、动态链接:当内核已经在内存中正在运行时,内核模块可以被加载和链接到内核
模块也可以在任何时刻被断开链接,从内存中移出insmod/rmmod
2、可堆栈模块:模块按层次排列,当被高层的客户模块访问时它们作为库,当被底
层模块访问时,它们作为客户
三、内核组件
信号:
内核通过信号调用进程。信号通知进程某些错误,比如被0除错误
系统调用:
进程通过系统调用来请求系统服务比如open,Msgrcv。分为六类:文件系统、进程、调度、进程通信、套接字
进程和调度器:
创建、管理、调度进程
虚拟内存:
为进程分配和管理虚拟内存
文件系统:
为文件目录和其他文件相关对象提供全局的层次化的命名空间,并提供文件系统函数
网络协议:
为用户的TCPIP协议套件提供套接字接口
字符设备驱动:
管理向内核一次发送或接收一个字节数据的设备,比如终端,调制解调器,打印机
块设备驱动:
管理以块为单位向内核发送和接收数据的设备,比如磁盘,CD,rom
网络设备驱动:
对网卡和通信端口提供管理,负责连接到网桥或路由器等网络设备
陷阱和错误:
处理cpu产生的陷阱和错误,比如内存错误
物理内存:
管理实际内存的内存页池和为虚拟内存分配内存页
中断:
处理来自外设的中断
第二章 文件
int open (const char*pathname,int flags)
int open(const char*pathname,int flags,made_t mode)
返回值:文件描述符。错误则返回-1
ssize_t read(int fd,void*buf,size_t count);//从文件描述符fd所引用的文件读取count字节到buf内存地址中。失败返回-1
程序访问文件,通过文件路径名
进程打开文件的时候,将获得一个非负整数标识即文件描述符,通过它对文件进行IO处理
标准输入stdin 0
标准输出stdout 1
标准错误stderr 2
这三个不需要打开,系统已经自动打开
目录:
将文件的名称和和它的索引节点结合在一起的一张表opendir()
索引节点:
包含文件的访问权限,大小,修改时间,文件所有者stat()
文件数据:
存储位置由索引节点指定,open(),read()来访问
注意:在使用终端或者通过文件交换信息时采用流的IO方法,使用网络或管道通信时,采用系统调用的IO方法