当前位置:   article > 正文

Linux系统编程(笔记)

Linux系统编程(笔记)

1、认识计算机系统(上)

1.1、计算机系统由软硬件构成

1.2、总线

1.3、I/O设备

1.4、内存

1.5、处理器

1.6、计算机硬件组成

2、认识计算机系统(下)

2.1、什么是操作系统

2.2、Linux内核模块

2.3、操作系统管理硬件(职责)

2.4、操作系统的三个基本抽象

2.5、进程

2.6、进程上下文切换(用户模式:运行用户自己写的代码。内核模式:运行操作系统本身的代码。进程A首先运行用户自己的代码,在用户模式下。当它调用了系统调用read接口去读文件的时候,就会转成内核模式去读文件,这边就做了一次上下文的切换。操作系统会去调用DMA控制器,对磁盘进行读的操作直接读取到内存当中而不需要CPU的参与,那么这时候CPU就腾出来通过CPU的调度程序调用了B进程。这样就回到了B进程中的用户模式。当磁盘读完后,会产生磁盘中断,又将用户模式切换到了内核模式,唤醒了A进程,A进程从read返回,又执行用户自己写的代码,切换回了用户模式。那么对用户来说,感觉A进程在独占CPU,因为进程间的切换时间是很短的,用户感觉不出来)

2.7、虚拟存储器(使得每个进程都好像在独占内存。进程中的内存都是虚拟内存,里面的地址都是虚拟地址,通过MMU来映射到实际的物理地址)

2.8、进程虚地址空间

2.9、文件

2.10、虚拟文件系统(VFS):对用户来说,提供了接口,屏蔽了下面的底层细节

3、系统编程介绍

3.1、系统编程与应用编程(系统编程一般是为了支撑应用编程)

3.2、系统资源

3.3、系统调用在系统中所处的位置

3.4、C库

3.5、系统调用与C库的关系

3.6、内核如何处理系统调用(先存放系统调用号,然后再存储调用参数,然后再执行指令)

3.7、系统调用的错误处理

4、文件与I/O(一)

4.1、什么是I/O

4.2、文件描述符

4.3、文件描述符与文件指针转换

4.5、文件系统调用

4.6、open系统调用

5、文件与I/O(二)

5.1、read系统调用

5.2、write系统调用

5.3、文件的随机读写

5.4、lseek系统调用

5.5、目录访问

6、文件与I/O(三)

6.1、stat函数

6.2、stat结构体

7、文件与I/O(四)

7.1、文件共享

7.2、复制文件描述符(分配文件描述符的时候,会按照顺序分配,如果中间有空的就会选择中间的,这样的话,1号描述符是标准输出,如果把1号关闭了,再复制一个当前一打开的文件描述符,那就会输出到当前打开的文件中,就实现了输出重定向)

7.3、复制文件描述符

8、文件与I/O(五)

8.1、fcntl函数

8.2、fcntl的常用操作

上面的会阻塞在read函数,除非吗输入aaaa后回车。下面设置非阻塞方式:

8.3、文件锁的结构体

9、进程

9.1、什么是进程(编译器从A切换到B,再切换回来,需要保存现场状态,也就是上下文信息。进程是对内存、CPU的一个抽象)

9.2、进程数据结构:进程控制块(PCB,progress control block)

9.3、进程与程序

10、进程(二)

10.1、进程状态变迁

中间红色是内核,下面就绪态就是可执行状态

10.2、进程控制块

10.2、进程标识

10.3、进程创建

10.4、进程撤销

10.5、终止进程的方法

11、进程(三)

11.1、复制一个进程映象fork

11.2、fork系统调用

为什么父进程为1?因为此时父子进程在交叉进程,无法判断哪个进程先结束,父进程先结束了。下面加上sleep就正常了

11.3、fork系统调用注意点

11.4写时复制copy on write

12、进程(四)

12.1、fork之后父子进程共享文件(两个进程共享文件表!)

​​​​​​​

12.2、fork与vfork

如果用vfork,那么父子进程公用同一份地址空间,并不是写时复制

12.3、exit与_exit

如果用_exit(0),没有清除内存缓冲区,这样就会残留在缓冲区,就不会输出到标准设备。如果加\n也会变成输出

缓冲区是由C库分配的,应该由C库清除,系统调用根本不知道你调用了缓冲区。

12.4、atexit

12.5、execve

父进程打印出来后,子进程就没有输出了,因为子进程被ps进程替换了。

13、进程(五)

13.1、exec替换进程映像

13.2、exec关联函数组

后面的退出主函数不会被打印,因为进程映像已经被替换了。

替换后的进程id是一样的。(这里面自己写一个hello程序,打印hello和进程id)

进程被替换失败后,就不会替换继续往下走

14、进程(六)

14.1、SIGCHLD信号

14.2、wait函数

下面这样就能保证子进程先退出,因为父进程一直阻塞在wait函数一直等待子进程结束后才结束

14.3、waitpid

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号