linux中的相关系统调用

一、 创建进程

创建进程的总结:

1、Linux中父进程调用fork创建子进程。
2、父进程调用fork时,子进程拷贝所有父进程的数据接口和代码过来。
3、当前进程是子进程,fork返回0;当前进程是父进程,fork返回子进程进程号
4、如果返回0,说明当前进程是子进程,子进程请求execve系统调用,执行另一个程序。
5、如果返回子进程号,说明当前进程是父进程,按照原父进程原计划执行。
6、父进程要对子进程负责,调用waitpid将子进程进程号作为参数,父进程就能知道子进程运行完了没有,成功与否。
7、操作系统启动的时候先创建了一个所有用户进程的“祖宗进程”,课时1,第3题A选项:0号进程是所有用户态进程的祖先

创建进程的系统调用:fork
执行另一个程序的系统调用:execve
将子进程的进程号作为参数传给它,父进程就能知道子进程运行完了没有,成功与否:waitpid

二、 内存管理

内存管理总结

1、每个进程都有独立的进程内存空间,互相之间不干扰。(隔离性)
2、进程内存空间,存放程序代码的部分,称为代码段(Code Segment)。
3、存放进程运行中产生数据的部分,称为数据段(Data Segment)。
4、进程写入数据的时候,现用现分物理内存给进程使用。
5、分配内存数量比较小时,使用brk调用,会和原来的堆数据连在一起。
6、需要分配的内存数据量比较大的时候,使用mmap,重新划分一块内存区域。

分配较小内存数量,和原来堆内数据连在一起:brk
分配较大内存数量,重新划分一块内存区域:mmap

三、 文件管理

文件的操作六个最重要系统调用:
打开文件:open
关闭文件:close
创建文件:creat
打开文件后跳到文件某个位置:lseek
读文件:read
写文件:write
Linux一切皆文件
一切皆文件的优势即使统一了操作的入口,提供了极大的便利。

四、 信号处理(异常处理)
进程执行过程中一旦有变动,就可以通过信号处理服务及时处理。

五、 进程间通信

有两种方式实现进程间通信
消息队列方式
创建一个新的队列:msgget
发送消息到消息队列:msgsnd
取出队列中的消息:msgrcv

六、 共享内存方式

创建共享内存块:shmget
将共享内存映射到自己的内存空间:shmat
利用信号量实现隔离性
占用信号量:sem_wait
释放信号量:sem_post

用strace跟踪whoami

(1)execve执行/usr/bin/whoami程序
(2)brk、mmap 内存映射,mprotect内存权限更改
(3)access、openat、fstat、read、lseek、close 文件权限、属性查看、打开、跳到文件某个位置,关闭等操作
(4)geteuid 获取用户id
(5)socket、connect网络通信
(6)write 文件写入
(7)arch_pctcl、exit_group 设计架构的进程或线程状态和退出进程中的所有线程

网络服务是通过套接字 Socket 来提供服务的。Socket 这个名字很有意思,可以作“插口”或者“插槽”讲.虽然我们是写软件程序,但是你可以想象成弄一根网线,一头插在客户端,一头插在服务端,然后进行通信。因此,在通信之前,双方都要建立一个 Socket。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值