第七版操作系统概念-进程管理
第三章 进程
3.1 进程概念
- 3.1.1 进程
- 3.1.2 进程状态
- 3.1.3 进程控制块
- 3.1.4 线程
3.2 进程调度
- 3.2.1 调度队列
- 3.2.2 调度程序
- 3.2.3 上下文切换
3.3 进程操作
- 3.3.1 进程创建
- 3.3.2 进程终止
3.4 进程间通信
- 3.4.1 共享内存系统
- 3.4.2 消息传递系统
3.5 IPC系统的实例
- 3.5.1 实例:POSIX 共享内存
- 3.5.2 实例:Mach
- 3.5.3 实例:Windows XP
3.6 客户机-服务器系统通信
- 3.6.1 Socket
- 3.6.2 远程过程调用
- 3.6.3 远程方法调用
课后习题
- 3.1
- 3.2
- 3.3
- 3.4
- 3.5
- 3.6
// 第一次编写多线程程序,激动。。。
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void f(int x) {
if (x == 1) {
printf("0");
return;
} else if (x == 2) {
printf("0 1");
return;
} else {
int *a = (int*)malloc(sizeof(x));
0[a] = 0;
1[a] = 1;
for (int i=2; i<x; ++i) {
i[a] = a[i-1] + a[i-1];
}
for (int i=0; i<x; ++i) {
printf("%d ", i[a]);
}
free(a);
}
}
int main() {
pid_t pid = fork();
if (pid < 0) {
exit(-1);
} else if (pid == 0) {
int x;
scanf("%d", &x);
if (x <= 0) {
fprintf(stderr, "f");
}
f(x);
exit(1);
} else {
wait(nullptr);
printf("ok");
exit(1);
}
}3.10
#include <stdio.h> #include <sys/shm.h> #include <sys/stat.h> #include <unistd.h> #include <stdlib.h> { // 这个括号只是为了隔一行,kan const int MAX_SEQUENCE = 10; typedef struct { int fib_sequence [MAX_SEQUENCE]; int sequence_size; }shared_data; } int main() { pid_t pid; int segment_id; shared_data *sd; int x; scanf("%d", &x); if (x > MAX_SEQUENCE) { fprintf(stderr, "x is error"); exit(-1); } else { // 创建共享内存块 segment_id = shmget(IPC_PRIVATE, sizeof(shared_data), S_IRUSR | S_IWUSR); // 将sd 指向共享内存块基址 sd = (shared_data *) shmat(segment_id, nullptr, 0); sd->sequence_size = x; // 创建 子进程 pid = fork(); if (pid < 0) { fprintf(stderr, "fork fail"); exit(-1); } else if (pid == 0) { // 子进程 写入数据 printf("size = %d\n", sd->sequence_size); if (sd->sequence_size == 1) { sd->fib_sequence[0] = 0; } else if (sd->sequence_size == 2) { sd->fib_sequence[0] = 0; sd->fib_sequence[1] = 1; } else { sd->fib_sequence[0] = 0; sd->fib_sequence[1] = 1; for (int i=2; i<sd->sequence_size; ++i) { sd->fib_sequence[i] = sd->fib_sequence[i-1] + sd->fib_sequence[i-2]; } } exit(1); } else { wait(nullptr); // 主进程读数据 for (int i=0; i<x; ++i) { printf("%d ", sd->fib_sequence[i]); } } shmdt(sd); // 销毁 shmctl(segment_id, IPC_RMID, nullptr); } return 0; }
##*后续还在更新中。。。。。。*
华为技术有限公司工作强度 1291人发布