OSTEP Chapter 13 回顾
这里回顾第13章,本章介绍了抽象:地址空间。
书籍介绍:
学习资料:
- https://pages.cs.wisc.edu/~remzi/OSTEP/
- https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese
- https://github.com/joshuap233/Operating-Systems-Three-Easy-Pieces-NOTES
第13 章 抽象:地址空间
内容回顾
关键概念
- 操作系统的历史
- 早期系统:内存中的一组函数
- 多道程序(multiprogramming)系统:多个进程在给定时间准备运行
- 分时系统:
- 方式一:让进程占用全部内存运行一段时间,然后停止,保存状态,切换到其他进程;
- 方式二:和方式一类似,但是只使用内存的一小部分;
- 地址空间
- 包括程序代码,堆,栈
- 虚拟化内存
- 在单一的物理内存上为多个运行的进程构建一个私有的,可能很大的地址空间的抽象
- 虚拟内存系统的目标
- 透明:让程序感受不到内存被虚拟化
- 效率:时间空间高效
- 保护:确保进程受到保护,不会受其他进程影响,也不会影响操作系统和其他进程,即隔离特性
- 后续会会介绍机制和策略
- 机制包括硬件和操作系统的支持
- 策略包括如何管理可用空间,空间不足时哪些页面该释放
作业
作业见:
1
略过。
2
╰─○ free -g
total used free shared buff/cache available
Mem: 12 0 10 0 0 11
Swap: 4 0 4
3
代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
printf("Number of input is %d!\n", argc);
if (argc == 1) {
printf("Please enter megabytes to use!\n");
exit(0);
}
int d = atoi(argv[1]);
// 判断是否有第二个参数
int flag = (argc < 2);
int T = 1;
if (argc >= 2) {
T = atoi(argv[2]);
}
// 循环次数
int t = 0;
int n = d * 1024 * 1024;
int *ptr = malloc(n * sizeof(int));
printf("%d\n", sizeof(ptr));
printf("%d\n", getpid());
while(1) {
if (!flag && (t == T)) {
break;
}
for (int i = 0; ; i++) {
ptr[i % n] = 1;
}
t += 1;
}
return 0;
}
4
运行程序前:
╰─○ free -m
total used free shared buff/cache available
Mem: 12664 750 11161 0 751 11645
Swap: 4096 0 4096
运行程序后:
╰─○ free -m
total used free shared buff/cache available
Mem: 12664 763 11149 0 751 11633
Swap: 4096 0 4096
5
略过。
6
ps -auxw
7
╰─○ pmap -x 248
248: /bin/zsh -l
Address Kbytes RSS Dirty Mode Mapping
000055ff84f36000 780 740 0 r-x-- zsh
000055ff84f36000 0 0 0 r-x-- zsh
000055ff851f9000 8 8 8 r---- zsh
000055ff851f9000 0 0 0 r---- zsh
000055ff851fb000 24 24 24 rw--- zsh
000055ff851fb000 0 0 0 rw--- zsh
000055ff85201000 80 40 40 rw--- [ anon ]
000055ff85201000 0 0 0 rw--- [ anon ]
000055ff863f4000 2724 2688 2688 rw--- [ anon ]
000055ff863f4000 0 0 0 rw--- [ anon ]
00007f131c4c8000 20 20 0 r-x-- system.so
00007f131c4c8000 0 0 0 r-x-- system.so
00007f131c4cd000 2044 0 0 ----- system.so
00007f131c4cd000 0 0 0 ----- system.so
00007f131c6cc000 4 4 4 r---- system.so
00007f131c6cc000 0 0 0 r---- system.so
00007f131c6cd000 4 4 4 rw--- system.so
00007f131c6cd000 0 0 0 rw--- system.so
00007f131c6d2000 8 8 0 r-x-- zleparameter.so
00007f131c6d2000 0 0 0 r-x-- zleparameter.so
00007f131c6d4000 2044 0 0 ----- zleparameter.so
00007f131c6d4000 0 0 0 ----- zleparameter.so
00007f131c8d3000 4 4 4 r---- zleparameter.so
00007f131c8d3000 0 0 0 r---- zleparameter.so
00007f131c8d4000 4 4 4 rw--- zleparameter.so
00007f131c8d4000 0 0 0 rw--- zleparameter.so
00007f131c8d5000 8 8 0 r-x-- langinfo.so
00007f131c8d5000 0 0 0 r-x-- langinfo.so
00007f131c8d7000 2044 0 0 ----- langinfo.so
00007f131c8d7000 0 0 0 ----- langinfo.so
00007f131cad6000 4 4 4 r---- langinfo.so
00007f131cad6000 0 0 0 r---- langinfo.so
00007f131cad7000 4 4 4 rw--- langinfo.so
00007f131cad7000 0 0 0 rw--- langinfo.so
00007f131cad8000 56 56 0 r-x-- complist.so
00007f131cad8000 0 0 0 r-x-- complist.so
00007f131cae6000 2048 0 0 ----- complist.so
00007f131cae6000 0 0 0 ----- complist.so
00007f131cce6000 4 4 4 r---- complist.so
00007f131cce6000 0 0 0 r---- complist.so
00007f131cce7000 4 4 4 rw--- complist.so
00007f131cce7000 0 0 0 rw--- complist.so
00007f131cce8000 104 96 0 r-x-- libpthread-2.27.so
00007f131cce8000 0 0 0 r-x-- libpthread-2.27.so
00007f131cd02000 2044 0 0 ----- libpthread-2.27.so
00007f131cd02000 0 0 0 ----- libpthread-2.27.so
00007f131cf01000 4 4 4 r---- libpthread-2.27.so
00007f131cf01000 0 0 0 r---- libpthread-2.27.so
00007f131cf02000 4 4 4 rw--- libpthread-2.27.so
00007f131cf02000 0 0 0 rw--- libpthread-2.27.so
00007f131cf03000 16 4 4 rw--- [ anon ]
00007f131cf03000 0 0 0 rw--- [ anon ]
00007f131cf07000 28 28 0 r-x-- librt-2.27.so
00007f131cf07000 0 0 0 r-x-- librt-2.27.so
00007f131cf0e000 2044 0 0 ----- librt-2.27.so
00007f131cf0e000 0 0 0 ----- librt-2.27.so
00007f131d10d000 4 4 4 r---- librt-2.27.so
00007f131d10d000 0 0 0 r---- librt-2.27.so
00007f131d10e000 4 4 4 rw--- librt-2.27.so
00007f131d10e000 0 0 0 rw--- librt-2.27.so
00007f131d10f000 8 8 0 r-x-- datetime.so
00007f131d10f000 0 0 0 r-x-- datetime.so
00007f131d111000 2044 0 0 ----- datetime.so
00007f131d111000 0 0 0 ----- datetime.so
00007f131d310000 4 4 4 r---- datetime.so
00007f131d310000 0 0 0 r---- datetime.so
00007f131d311000 4 4 4 rw--- datetime.so
00007f131d311000 0 0 0 rw--- datetime.so
00007f131d312000 12 12 0 r-x-- stat.so
00007f131d312000 0 0 0 r-x-- stat.so
00007f131d315000 2044 0 0 ----- stat.so
00007f131d315000 0 0 0 ----- stat.so
00007f131d514000 4 4 4 r---- stat.so
00007f131d514000 0 0 0 r---- stat.so
00007f131d515000 4 4 4 rw--- stat.so
00007f131d515000 0 0 0 rw--- stat.so
00007f131d532000 40 40 0 r-x-- parameter.so
00007f131d532000 0 0 0 r-x-- parameter.so
00007f131d53c000 2044 0 0 ----- parameter.so
00007f131d53c000 0 0 0 ----- parameter.so
00007f131d73b000 4 4 4 r---- parameter.so
00007f131d73b000 0 0 0 r---- parameter.so
00007f131d73c000 4 4 4 rw--- parameter.so
00007f131d73c000 0 0 0 rw--- parameter.so
00007f131d73d000 32 32 0 r-x-- zutil.so
00007f131d73d000 0 0 0 r-x-- zutil.so
00007f131d745000 2044 0 0 ----- zutil.so
00007f131d745000 0 0 0 ----- zutil.so
00007f131d944000 4 4 4 r---- zutil.so
00007f131d944000 0 0 0 r---- zutil.so
00007f131d945000 4 4 4 rw--- zutil.so
00007f131d945000 0 0 0 rw--- zutil.so
00007f131d946000 136 96 0 r-x-- complete.so
00007f131d946000 0 0 0 r-x-- complete.so
00007f131d968000 2048 0 0 ----- complete.so
00007f131d968000 0 0 0 ----- complete.so
00007f131db68000 4 4 4 r---- complete.so
00007f131db68000 0 0 0 r---- complete.so
00007f131db69000 4 4 4 rw--- complete.so
00007f131db69000 0 0 0 rw--- complete.so
00007f131db6a000 280 276 0 r-x-- zle.so
00007f131db6a000 0 0 0 r-x-- zle.so
00007f131dbb0000 2048 0 0 ----- zle.so
00007f131dbb0000 0 0 0 ----- zle.so
00007f131ddb0000 8 8 8 r---- zle.so
00007f131ddb0000 0 0 0 r---- zle.so
00007f131ddb2000 28 28 28 rw--- zle.so
00007f131ddb2000 0 0 0 rw--- zle.so
00007f131ddb9000 4 4 4 rw--- [ anon ]
00007f131ddb9000 0 0 0 rw--- [ anon ]
00007f131ddba000 8 8 0 r-x-- terminfo.so
00007f131ddba000 0 0 0 r-x-- terminfo.so
00007f131ddbc000 2044 0 0 ----- terminfo.so
00007f131ddbc000 0 0 0 ----- terminfo.so
00007f131dfbb000 4 4 4 r---- terminfo.so
00007f131dfbb000 0 0 0 r---- terminfo.so
00007f131dfbc000 4 4 4 rw--- terminfo.so
00007f131dfbc000 0 0 0 rw--- terminfo.so
00007f131dfbd000 44 44 0 r-x-- libnss_files-2.27.so
00007f131dfbd000 0 0 0 r-x-- libnss_files-2.27.so
00007f131dfc8000 2044 0 0 ----- libnss_files-2.27.so
00007f131dfc8000 0 0 0 ----- libnss_files-2.27.so
00007f131e1c7000 4 4 4 r---- libnss_files-2.27.so
00007f131e1c7000 0 0 0 r---- libnss_files-2.27.so
00007f131e1c8000 4 4 4 rw--- libnss_files-2.27.so
00007f131e1c8000 0 0 0 rw--- libnss_files-2.27.so
00007f131e1c9000 24 0 0 rw--- [ anon ]
00007f131e1c9000 0 0 0 rw--- [ anon ]
00007f131e1cf000 92 64 0 r-x-- libnsl-2.27.so
00007f131e1cf000 0 0 0 r-x-- libnsl-2.27.so
00007f131e1e6000 2044 0 0 ----- libnsl-2.27.so
00007f131e1e6000 0 0 0 ----- libnsl-2.27.so
00007f131e3e5000 4 4 4 r---- libnsl-2.27.so
00007f131e3e5000 0 0 0 r---- libnsl-2.27.so
00007f131e3e6000 4 4 4 rw--- libnsl-2.27.so
00007f131e3e6000 0 0 0 rw--- libnsl-2.27.so
00007f131e3e7000 8 0 0 rw--- [ anon ]
00007f131e3e7000 0 0 0 rw--- [ anon ]
00007f131e3e9000 44 44 0 r-x-- libnss_nis-2.27.so
00007f131e3e9000 0 0 0 r-x-- libnss_nis-2.27.so
00007f131e3f4000 2044 0 0 ----- libnss_nis-2.27.so
00007f131e3f4000 0 0 0 ----- libnss_nis-2.27.so
00007f131e5f3000 4 4 4 r---- libnss_nis-2.27.so
00007f131e5f3000 0 0 0 r---- libnss_nis-2.27.so
00007f131e5f4000 4 4 4 rw--- libnss_nis-2.27.so
00007f131e5f4000 0 0 0 rw--- libnss_nis-2.27.so
00007f131e5f5000 32 32 0 r-x-- libnss_compat-2.27.so
00007f131e5f5000 0 0 0 r-x-- libnss_compat-2.27.so
00007f131e5fd000 2048 0 0 ----- libnss_compat-2.27.so
00007f131e5fd000 0 0 0 ----- libnss_compat-2.27.so
00007f131e7fd000 4 4 4 r---- libnss_compat-2.27.so
00007f131e7fd000 0 0 0 r---- libnss_compat-2.27.so
00007f131e7fe000 4 4 4 rw--- libnss_compat-2.27.so
00007f131e7fe000 0 0 0 rw--- libnss_compat-2.27.so
00007f131e7ff000 1484 72 0 r---- LC_COLLATE
00007f131e7ff000 0 0 0 r---- LC_COLLATE
00007f131e972000 1948 1500 0 r-x-- libc-2.27.so
00007f131e972000 0 0 0 r-x-- libc-2.27.so
00007f131eb59000 2048 0 0 ----- libc-2.27.so
00007f131eb59000 0 0 0 ----- libc-2.27.so
00007f131ed59000 16 16 16 r---- libc-2.27.so
00007f131ed59000 0 0 0 r---- libc-2.27.so
00007f131ed5d000 8 8 8 rw--- libc-2.27.so
00007f131ed5d000 0 0 0 rw--- libc-2.27.so
00007f131ed5f000 16 16 16 rw--- [ anon ]
00007f131ed5f000 0 0 0 rw--- [ anon ]
00007f131ed63000 1652 316 0 r-x-- libm-2.27.so
00007f131ed63000 0 0 0 r-x-- libm-2.27.so
00007f131ef00000 2044 0 0 ----- libm-2.27.so
00007f131ef00000 0 0 0 ----- libm-2.27.so
00007f131f0ff000 4 4 4 r---- libm-2.27.so
00007f131f0ff000 0 0 0 r---- libm-2.27.so
00007f131f100000 4 4 4 rw--- libm-2.27.so
00007f131f100000 0 0 0 rw--- libm-2.27.so
00007f131f101000 148 148 0 r-x-- libtinfo.so.5.9
00007f131f101000 0 0 0 r-x-- libtinfo.so.5.9
00007f131f126000 2048 0 0 ----- libtinfo.so.5.9
00007f131f126000 0 0 0 ----- libtinfo.so.5.9
00007f131f326000 16 16 16 r---- libtinfo.so.5.9
00007f131f326000 0 0 0 r---- libtinfo.so.5.9
00007f131f32a000 4 4 4 rw--- libtinfo.so.5.9
00007f131f32a000 0 0 0 rw--- libtinfo.so.5.9
00007f131f32b000 12 12 0 r-x-- libdl-2.27.so
00007f131f32b000 0 0 0 r-x-- libdl-2.27.so
00007f131f32e000 2044 0 0 ----- libdl-2.27.so
00007f131f32e000 0 0 0 ----- libdl-2.27.so
00007f131f52d000 4 4 4 r---- libdl-2.27.so
00007f131f52d000 0 0 0 r---- libdl-2.27.so
00007f131f52e000 4 4 4 rw--- libdl-2.27.so
00007f131f52e000 0 0 0 rw--- libdl-2.27.so
00007f131f52f000 16 16 0 r-x-- libcap.so.2.25
00007f131f52f000 0 0 0 r-x-- libcap.so.2.25
00007f131f533000 2048 0 0 ----- libcap.so.2.25
00007f131f533000 0 0 0 ----- libcap.so.2.25
00007f131f733000 4 4 4 r---- libcap.so.2.25
00007f131f733000 0 0 0 r---- libcap.so.2.25
00007f131f734000 4 4 4 rw--- libcap.so.2.25
00007f131f734000 0 0 0 rw--- libcap.so.2.25
00007f131f735000 164 164 0 r-x-- ld-2.27.so
00007f131f735000 0 0 0 r-x-- ld-2.27.so
00007f131f779000 16 16 16 rw--- [ anon ]
00007f131f779000 0 0 0 rw--- [ anon ]
00007f131f77d000 196 112 0 r---- LC_CTYPE
00007f131f77d000 0 0 0 r---- LC_CTYPE
00007f131f7ae000 4 4 0 r---- LC_NUMERIC
00007f131f7ae000 0 0 0 r---- LC_NUMERIC
00007f131f7af000 1644 64 0 r---- locale-archive
00007f131f7af000 0 0 0 r---- locale-archive
00007f131f94a000 16 16 16 rw--- [ anon ]
00007f131f94a000 0 0 0 rw--- [ anon ]
00007f131f94e000 4 4 0 r---- LC_TIME
00007f131f94e000 0 0 0 r---- LC_TIME
00007f131f94f000 4 4 0 r---- LC_MONETARY
00007f131f94f000 0 0 0 r---- LC_MONETARY
00007f131f950000 4 4 0 r---- SYS_LC_MESSAGES
00007f131f950000 0 0 0 r---- SYS_LC_MESSAGES
00007f131f951000 4 4 0 r---- LC_PAPER
00007f131f951000 0 0 0 r---- LC_PAPER
00007f131f952000 4 4 0 r---- LC_NAME
00007f131f952000 0 0 0 r---- LC_NAME
00007f131f953000 4 4 0 r---- LC_ADDRESS
00007f131f953000 0 0 0 r---- LC_ADDRESS
00007f131f954000 4 4 0 r---- LC_TELEPHONE
00007f131f954000 0 0 0 r---- LC_TELEPHONE
00007f131f955000 4 4 0 r---- LC_MEASUREMENT
00007f131f955000 0 0 0 r---- LC_MEASUREMENT
00007f131f956000 28 28 0 r--s- gconv-modules.cache
00007f131f956000 0 0 0 r--s- gconv-modules.cache
00007f131f95d000 4 4 0 r---- LC_IDENTIFICATION
00007f131f95d000 0 0 0 r---- LC_IDENTIFICATION
00007f131f95e000 4 4 4 r---- ld-2.27.so
00007f131f95e000 0 0 0 r---- ld-2.27.so
00007f131f95f000 4 4 4 rw--- ld-2.27.so
00007f131f95f000 0 0 0 rw--- ld-2.27.so
00007f131f960000 4 4 4 rw--- [ anon ]
00007f131f960000 0 0 0 rw--- [ anon ]
00007ffcd72f4000 276 272 272 rw--- [ stack ]
00007ffcd72f4000 0 0 0 rw--- [ stack ]
00007ffcd73e8000 12 0 0 r---- [ anon ]
00007ffcd73e8000 0 0 0 r---- [ anon ]
00007ffcd73eb000 4 4 0 r-x-- [ anon ]
00007ffcd73eb000 0 0 0 r-x-- [ anon ]
---------------- ------- ------- -------
total kB 57532 7420 3332
8
╰─○ pmap -x 9523
9523: ./memory-user 1 100
Address Kbytes RSS Dirty Mode Mapping
000056296185d000 4 4 4 r-x-- memory-user
000056296185d000 0 0 0 r-x-- memory-user
0000562961a5d000 4 4 4 r---- memory-user
0000562961a5d000 0 0 0 r---- memory-user
0000562961a5e000 4 4 4 rw--- memory-user
0000562961a5e000 0 0 0 rw--- memory-user
00005629633eb000 132 4 4 rw--- [ anon ]
00005629633eb000 0 0 0 rw--- [ anon ]
00007fdeff7b0000 4100 4100 4100 rw--- [ anon ]
00007fdeff7b0000 0 0 0 rw--- [ anon ]
00007fdeffbb1000 1948 1340 0 r-x-- libc-2.27.so
00007fdeffbb1000 0 0 0 r-x-- libc-2.27.so
00007fdeffd98000 2048 0 0 ----- libc-2.27.so
00007fdeffd98000 0 0 0 ----- libc-2.27.so
00007fdefff98000 16 16 16 r---- libc-2.27.so
00007fdefff98000 0 0 0 r---- libc-2.27.so
00007fdefff9c000 8 8 8 rw--- libc-2.27.so
00007fdefff9c000 0 0 0 rw--- libc-2.27.so
00007fdefff9e000 16 12 12 rw--- [ anon ]
00007fdefff9e000 0 0 0 rw--- [ anon ]
00007fdefffa2000 164 164 0 r-x-- ld-2.27.so
00007fdefffa2000 0 0 0 r-x-- ld-2.27.so
00007fdf001b9000 8 8 8 rw--- [ anon ]
00007fdf001b9000 0 0 0 rw--- [ anon ]
00007fdf001cb000 4 4 4 r---- ld-2.27.so
00007fdf001cb000 0 0 0 r---- ld-2.27.so
00007fdf001cc000 4 4 4 rw--- ld-2.27.so
00007fdf001cc000 0 0 0 rw--- ld-2.27.so
00007fdf001cd000 4 4 4 rw--- [ anon ]
00007fdf001cd000 0 0 0 rw--- [ anon ]
00007ffd41975000 136 12 12 rw--- [ stack ]
00007ffd41975000 0 0 0 rw--- [ stack ]
00007ffd419a4000 12 0 0 r---- [ anon ]
00007ffd419a4000 0 0 0 r---- [ anon ]
00007ffd419a7000 4 4 0 r-x-- [ anon ]
00007ffd419a7000 0 0 0 r-x-- [ anon ]
---------------- ------- ------- -------
total kB 8616 5692 4184
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere