day07 基础知识
回顾之前内容:
1 内核版本 开源
发行版本
2 目录结构(文件系统)
/根
boot etc bin lib home root proc usr var …
stu1 stu2
stu1:家目录/ome/stu1
cd~
3 文件类型 普通文件 - 目标文件 d
4 权限 r w x - chmod u/g/o
5 基本命令 cd touch mkdir pwd ls cp rm mv
cat more less head tai vi/vim
ps kill jobs &
6 sudo su , apt install gcc(软件名)
gcc -o main main.c 预编译 编译 汇编 链接
gcc -o main main.c add.c max.c(多文件 只有一个文件中包含主函数)
make makefile -->cmake
7 库文件:预先编译好的方法的集合
静态库 libxx.a
共享库 libxx.so
1 进程:一个正在运行的程序
由操作系统管理
2 PCB:进程控制块 是进程存在的唯一标志 存放进程的属性信息
struct task_struct;
3 进程状态:就绪 运行 阻塞
4 并发 一个处理器时间片轮转交替执行
并行 多处理器同时执行
5 内存
物理内存 划分成一个个页面
虚拟内存(物理内存不够用) 在磁盘上 不是真实的物理内存 运行比物理内存大的程序
运行程序生成页表 逻辑页 | 物理页
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
// argc 参数个数 argv 参数内容 envp 环境变量
int main(int argc,char* argv[],char* envp[])
{
printf("argc=%d\n",argc);// argc 参数个数
for( int i = 0 ; i < argc ; i++)//argv 参数内容
{
printf("argv[%d]=%s", i , argv[i]);
}
for( int i = 0 ; envp[i] != NULL ; i++)//envp 环境变量
{
printf("envp[%d]=%s\n", i , envp[i]);
}
}
复制进程 fork
pid_t fork(void);
函数返回类型pid_t实质是int类型
父进程 子进程
区分:通过fork的返回值
在父进程中返回子进程的pid,在子进程中返回0,失败返回-1
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
int main()
{
int n = 0; //控制循环次数
char * s = NULL; //打印内容
pid_t pid = fork();
assert( pid != -1 );
if ( pid == 0 )
{
s = "child";
n = 3;
}
else
{
s = "parent";
n = 7;
}
for( int i = 0 ; i < n ; i++)
{
printf("s = %s\n",s);
sleep(1);
}
exit(0);
}