系统编程

来源:互联网 发布:java 深度遍历算法 编辑:程序博客网 时间:2024/06/10 02:00

系统编程之基础知识篇

  • 1、什么是操作系统
操作系统是把计算机的硬件管理起来,让硬件正常运行
  • 2、计算机的主要组成
CPU(运算器 控制器 寄存器组) 内存(主存) 存储(硬盘,移动硬盘,U盘) 键盘和鼠标 显示器
  • 3、计算机指令的运行过程
从内存中取一条指令通过控制器译码把指令发送给CPU运算器CPU运算器进行逻辑和数据运算把运算的结果发送到内存取址 译码 运算
  • 4、CPU的主要组成
运算器 数据运算控制器 MAR 内存地址寄存器 MBR 内存缓冲寄存器IO AR IO地址寄存器IO BR IO缓冲寄存器PC 程序计数器PSW 程序状态寄存器控制器主要是和内存数据传递,控制器和内存的读写速度不一致,引入了cache寄存器组专有寄存器组和通用寄存器组,编程是程序可以读写的是通用寄存器组 AX BX CX DX控制寄存器数据寄存器状态寄存器
  • 5、系统总线
地址总线:是系统的位数,也说明了寻址空间,比如32位系统寻址空间是2^32=4G,64位系统2^64=2^32*2^32=2^32*4G数据总线:计算机在处理数据时,并发或者同时处理数据的位数,可能是20位,24位控制总线:中断 时钟 复位 IO读写 存储读写 系统总线请求
  • 6、指令的组成
分2部分  操作码+运算数
1)4地址指令: OP A1 A2 A3 A4  + 把A1和A2的运算结果存储在A3中,A4是下一条指令2)3地址指令:OP A1 A2 A3   把下一条指令存储在了PC寄存器3)2地址指令:OP A1 A2      把A1和A2的运算结果存储在A1中, PC存储下一条指令4)1地址指令:OP A1         ACC累加器 A1+ACC结果存储在ACC,PC存储下一条指令5)0地址指令:OP            SP堆栈指针
  • 7、指令的寻址方式
1)立即数寻址      mov r0,r1,#22)直接寻址       地址中存储的是数据 相当于一维指针3)隐含寻址       ACC4)间接寻址       地址中存储的还是地址,相当于二维指针5)寄存器寻址 6)寄存器间接寻址7)基址寻址       基址寄存器8)变址寻址       变址寄存器9)相对寻址       PC寄存器10)堆栈寻址      SP
  • 8、中断
系统中的一个进程在运行,有优先级高的进程的时候,原来的进程暂停运行,优先级高的进程先运行,运行完后,中断返回,原来的进程继续运行中断向量表通过寄存器组,中断前把数据和程序运行状态保存在寄存器组中,中断之后,从寄存器组中把数据恢复出来,继续原来程序的运行
  • 9、冯.诺伊曼架构
1)二进制思想2)程序存储思想计算机中的一切程序=二进制+上下文
  • 10、阻塞 非阻塞 异步
1)阻塞  scanf() fgets() getchar()2)非阻塞  中断,程序一直在循环查询中断向量表,等待中断的返回从现象说,阻塞和非阻塞都是程序停止,不继续运行,但是从微观上说是有区别的3)异步  DMA  CPU告诉硬盘控制器某件事情,硬盘控制器开始完成这件事情,完成之后告诉CPU,在完成事情的过程中,CPU和硬盘控制器是各自忙各自的。硬盘控制器也具有CPU的一定功能了。
  • 11、系统调用
计算机系统分2层:应用层和内核层系统调用是应用程序和系统内核数据传递的方法应用程序把数据通过系统调用发送给内核,内核进行数据的运算,把运算的结果通过系统调用返回给应用程序应用层相当于是客户端,内核层相当于是服务器
  • 12、glibc库和系统调用
glibc库函数是封装的系统调用函数,封装了大部分的系统调用,但不是全部glibc封装的函数更容易使用,更易于移植比如,glibc库函数:fopen() fclse() fread() fwrite() fseek()系统调用: open() close() read() write() lseek()exit()   glibc库函数_exit()  系统调用函数void exit(int status){    _exit(status);    printf("\n");//刷新缓冲区    return;}
  • 13、硬盘
扇区 柱面 磁头磁盘读写的方法:磁盘在旋转,磁头是按照一个扇区一个扇区读写的。扇区:512字节组:多个扇区组成组,1K 2K 4K分区:多个组组成分区
  • 14、标准文件读写
1)按照字符读写getchar() putchar()2)按照行读写fgets() fputs()3)按照块读写fread() fwrite()4)循环读文件while(fread(buf,sizeof(buf),1,fp)>0){    ......}
  • 15、打印错误信息的函数
#include <errno.h>char *strerror(int errno);#include <stdio.h>perror("fopen");
  • 16、文件拷贝
diff 比较2个文件是否相同
  • 17、系统支持的最大文件描述符
系统默热支持的最大文件描述符的个数是1024个cat /proc/sys/fs/file_maxulimit -n //1024
  • 18、ini文件转化为html文件
ini文件;stu[stu]zhangsan = 123456lisi = 123456;teacher[teac]wangwu = 123456html文件<!__stu__><stu>    zhansan=123456    lisi=123456</stu><!__teac__><teac>    wangwu=123456</teac>
  • 19、文件类型
ls -l- 普通文件类型d 目录c 字符设备文件b 块设备文件s socket文件p 管道文件l 链接文件
  • 20、软链接和硬链接
软链接: ln -s oldfile newfile硬链接: ln oldfile newfile软链接:链接文件和源文件的inode节点编号不一样,是不同的文件,软链接相当于是快捷方式硬链接:链接文件和源文件的inode节点编号一样,是同一个文件,但是硬链接是源文件的不同存在形式,如果需要删掉硬链接文件,需要删掉所有的硬连接和源文件,链接文件和源文件,任何一个修改后,相应的文件内容都会修改
  • 21、系统文件描述符
标准文件IO FILE *fp系统文件IO int fd系统启动后,有3个文件描述符已经分配好了stdin   0  STDIN_FILENOstdout  1  STDOUT_FILENOstderr  2  STDERR_FILENO文件描述符分配有个原则:最小的,未用的比如说,012已经分配了,再分配的话,是3如果说0,1,2,3,4,5,6,分配了,5关闭了,再分配是多少?是5还是7?  是5
  • 22、系统文件IO
标准文件IO只能打开普通文件,不能打开系统文件;系统文件IO不仅可以打开系统文件,还可以打开普通文件1)open#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);返回值:成功返回新的文件描述符,错误返回值是-1pathname:是文件名或者绝对路径的文件名flags:O_RDONLY 可读O_WRONLY 可写O_RDWR   可读写O_CREAT  如果文件不存在,则创建O_TRUNC  每次写文件,重写O_APPEND 追加mode111 111 111 777 110 100 100 644当前用户  同组用户  其他组用户0644  0是系统的粘着位2)close#include <unistd.h>int close(int fd);成功是0,错误是-13)read#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);fd:文件描述符buf:从文件中读出的数据存放到什么地方count:读出来的字节数返回值:成功返回是读取的字节数;错误返回-14)write#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);fd:文件描述符buf:写的数据存放在什么地方count:写的数据的长度是多少返回值:成功返回的是写成功的字节数;错误返回-15)lseek只对系统文件有效,对特殊的文件,比如管道,socket无效#include <sys/types.h>#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);fd:文件描述符offset:文件偏移量whence:SEEK_SET SEEK_CUR SEEK_END返回值:成功返回的是偏移量;错误返回 (off_t)-1
1 0
原创粉丝点击