Linux 2.6.24内核调度器详解与笔记

5星 · 超过95%的资源 需积分: 23 31 下载量 69 浏览量 更新于2024-07-16 1 收藏 1.36MB PDF 举报
本文是一份关于Linux 2.6.24内核调度器的复习笔记,由Kevin.Liu于2012年10月20日至2012年10月27日整理。笔记旨在帮助读者回顾和理解调度器的工作原理,而非原创内容,主要依据Wolfgang Mauerer的《深入理解Linux内核架构》以及相关博客、网站和论文。笔记重点涵盖了以下几个方面: 1. 调度器功能结构: - 运行队列(RunQueue):这是存储待调度进程的核心数据结构,每个CPU都有一个独立的运行队列。 - 核心调度器:包括主调度器和周期性调度器,主调度器负责选择下一个运行的进程,周期性调度器处理定时任务。 - 调度器类:组织和管理不同类型的调度策略,如实时进程和普通进程。 2. 进程排序与优先级: - 实时进程:这些进程有严格的优先级和执行时间限制,调度器会确保它们得到及时处理。 - 普通进程: - 模型建立:通过比较进程的优先级、执行时间片等参数,确定其在队列中的位置。 - 抽象模型总结:介绍了调度算法,如完全公平调度(CFS),它平衡了公平性和响应速度。 - 真实模型概述:解释了调度器如何在实际操作中根据这些模型进行进程调度。 3. 注意事项: - 笔记中的“队列”并非指抽象数据结构中的queue,而是指进程按照特定顺序排列的逻辑结构。 - 作者提醒读者可能存在谬误,鼓励读者质疑并指出错误,以避免误导他人。 - 文章允许自由转载,但要求在更新错误时同步更新,以防止错误传播。 通过这篇笔记,学习者可以深入了解Linux 2.6.24内核调度器的工作原理,特别是对于理解进程优先级控制和调度策略有极大帮助。同时,它也强调了理解和验证信息的重要性,鼓励读者在学习过程中保持批判性思维。

class Process: def __init__(self, pid, arrival_time, burst_time): self.pid = pid self.arrival_time = arrival_time self.burst_time = burst_time self.waiting_time = 0 self.turnaround_time = 0 self.response_ratio = 0 self.start_time = 0 self.complete_time = 0 def hrrn(processes): n = len(processes) current_time = 0 completed_processes = [] while len(completed_processes) < n: # 计算每个进程的响应比 for p in processes: if p not in completed_processes: waiting_time = current_time - p.arrival_time p.response_ratio = 1 + waiting_time / p.burst_time # 选择响应比最大的进程执行 selected_process = max(processes, key=lambda x: x.response_ratio) selected_process.start_time = current_time selected_process.complete_time = current_time + selected_process.burst_time selected_process.turnaround_time = selected_process.complete_time - selected_process.arrival_time current_time = selected_process.complete_time completed_processes.append(selected_process) return completed_processes # 创建进程列表 processes = [ Process(1, 0, 10), Process(2, 1, 5), Process(3, 2, 8), Process(4, 3, 6), ] # 运行调度算法 completed_processes = hrrn(processes) # 输出结果 total_wait_time = sum([p.waiting_time for p in completed_processes]) total_turnaround_time = sum([p.turnaround_time for p in completed_processes]) total_weighted_turnaround_time = sum([p.turnaround_time / p.burst_time for p in completed_processes]) for p in completed_processes: print( f"Process {p.pid}:到达时间 {p.arrival_time},所需执行时间{p.burst_time},开始时间{p.start_time},结束时间 {p.complete_time},周转时间 {p.turnaround_time},带权周转时间 {p.turnaround_time / p.burst_time:.2f}") print(f"平均周转时间:{total_turnaround_time / len(completed_processes):.2f}") print(f"平均带权周转时间:{total_weighted_turnaround_time / len(completed_processes):.2f}") 解释这段代码的设计思路

112 浏览量

def get_data(train_df): train_df = train_df[['user_id', 'behavior_type']] train_df=pd.pivot_table(train_df,index=['user_id'],columns=['behavior_type'],aggfunc={'behavior_type':'count'}) train_df.fillna(0,inplace=True) train_df=train_df.reset_index(drop=True) train_df.columns=train_df.columns.droplevel(0) x_train=train_df.iloc[:,:3] y_train=train_df.iloc[:,-1] type=torch.float32 x_train=torch.tensor(x_train.values,dtype=type) y_train=torch.tensor(y_train.values,dtype=type) print(x_train) print(y_train) return x_train ,y_train x_train,y_train=get_data(train_df) x_test,y_test=get_data(test_df) print(x_test) #创建模型 class Order_pre(nn.Module): def __init__(self): super(Order_pre, self).__init__() self.ln1=nn.LayerNorm(3) self.fc1=nn.Linear(3,6) self.fc2 = nn.Linear(6, 12) self.fc3 = nn.Linear(12, 24) self.dropout=nn.Dropout(0.5) self.fc4 = nn.Linear(24, 48) self.fc5 = nn.Linear(48, 96) self.fc6 = nn.Linear(96, 1) def forward(self,x): x=self.ln1(x) x=self.fc1(x) x = nn.functional.relu(x) x = self.fc2(x) x = nn.functional.relu(x) x = self.fc3(x) x = self.dropout(x) x = nn.functional.relu(x) x = self.fc4(x) x = nn.functional.relu(x) x = self.fc5(x) x = nn.functional.relu(x) x = self.fc6(x) return x #定义模型、损失函数和优化器 model=Order_pre() loss_fn=nn.MSELoss() optimizer=torch.optim.SGD(model.parameters(),lr=0.05) #开始跑数据 for epoch in range(1,50): #预测值 y_pred=model(x_train) #损失值 loss=loss_fn(y_pred,y_train) #反向传播 optimizer.zero_grad() loss.backward() optimizer.step() print('epoch',epoch,'loss',loss) # 开始预测y值 y_test_pred=model(x_test) y_test_pred=y_test_pred.detach().numpy() y_test=y_test.detach().numpy() y_test_pred=pd.DataFrame(y_test_pred) y_test=pd.DataFrame(y_test) dfy=pd.concat([y_test,y_test_pred],axis=1) print(dfy) dfy.to_csv('resulty.csv') 如果我想要使用学习率调度器应该怎么操作

202 浏览量