操作系统笔记

0.绪论

操作系统是个软件,为了让程序更好的在上面运行。比如说运行多个程序,让他们的内存隔离开来;让程序更好地和设备交互。
程序的输出可以输出到设备、文件、屏幕。
进程是运行的程序,操作系统希望把多个程序加入内存,把多个程序隔离开来,在多个程序中切换,因此有了进程的概念。
进程管理的API:创建一个进程,把一个进程从一个磁盘上加载到内存,把一个进程从内存换出到磁盘。
时钟中断定时去打断cpu,在中断处理程序里切换程序。
查看进程的具体信息: cd /proc/1;cat maps;stat运行多长时间,cmdline到底是什么样的程序
操作系统的three easy pieces::虚拟化:进程、虚拟储存、设备抽象;并发:多个程序分时共享多个处理器,进程/线程间通信;持久化:UNIX文件系统和他们的后代们(ext2,ext33,ext4,btrfs,xfs,zfs)。

Take-aways and Wrap-up:
操作系统解决”运行多个程序“的需求

  • 这个需求是随着计算机性能的增长自然而然出现的

操作系统设计/实现需要考虑的问题

  • 如何让复用(虚拟化)硬件资源,使每个程序看起来都在独占计算机?
  • 提供什么样的API使各类程序都能被实现?
    • 编译器?
    • 浏览器?
    • IDE?
    • 任务管理器?
    • 游戏外挂?

1.应用眼中的操作系统

什么是软件: 可执行文件和其他数据文件,ELF(Executable Linkable Format)是最常用的。gcc -c a.c生成目标文件,gcc a.o链接成可执行文件。
查看ip地址: ip address
查看文件储存地址: xxd a.c
指定入口函数: ld -e foo test.o
查询目标文件的信息: objdump
面试题: 一个普通的C程序执行的第一条指令在哪里?答:操作系统给我们最初始的加载器,然后加载libc,再调用libc的初始化,最后调用main。main的开始和结束不是整个程序的开始和结束。
追踪系统调用和信号: strace
程序流程:

  • 被操作系统加载
    • 通过父进程的execve
  • 不断执行系统调用
    • 进程管理:fork,execve,exit
    • 文件/设备管理:open,close,read,write
    • 存储管理:mmap,brk
  • 直到_exit(exit_group)

2.并发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值