第七版操作系统概念-进程管理

第三章 进程


  • 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;
    }
    
    





##*后续还在更新中。。。。。。*
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
简历当中有水分算不算造假...
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 18:05
哈哈哈哈哈感觉朋友找工作的已经疯掉了,直接上图
码农索隆:真老板娘:“我嘞个去,这不我当年的套路吗
点赞 评论 收藏
分享
Twilight_m...:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
就前几天旅游的时候,打开抖音就经常刷到这类视频:以前是高学历学生、老师、主持人,现在做着团播、擦边主播的工作,以及那些经过精心包装的“职业转型”故事——从铺天盖地的VLOG到所谓的“04年夜场工作日记”,这些内容在初中升学、高考放榜等关键时间节点持续发酵。可以说非常直接且精准地在潜移默化地影响着心智尚未成熟的青少年,使其对特殊行业逐渐脱敏。那我就想问了:某些传播公司、平台运营者甚至某些夜场的老板,你们究竟在传递怎样的价值观?点开那些视频,评论区里也是呈现明显的两极分化:一种是​​经济下行论​​:“现在就业市场已经艰难到这种程度了吗?”​​一种是事实反驳派​​:这些创作者往往拥有名校背景,从事着...
牛客刘北:被环境教育的,为了能拿到足够的钱养活自己,不甘心也得甘心,现在的短视频传播的思想的确很扭曲,但是很明显,互联网玩上一年你就能全款提A6,但你全心全意不吃不喝工作一年未必能提A6,但是在高考中考出现这个的确很扭曲,在向大家传播“不上学,玩互联网也可以轻松年入百万”,不是人变了,是社会在变
预测一下26届秋招形势
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务