操作系统实验一
更新时间:2023-10-02 04:15:01 阅读量: 综合文库 文档下载
- 操作系统推荐度:
- 相关推荐
中南大学
操作系统实验报告
姓名: 学号: 班级: 软件工程 指导老师: 胡志刚 完成时间: 2014-11
实验1《CPU Scheduling》
实验学时: 2 实验地点: 二综204 实验日期: 2014/11/19
一、实验目的
多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,加深了解处理机调度的工作过程。
二、实验内容
选择或者自行设计一个调度算法,实现处理机调度。 构建PCB,内容至少涵盖: 要求运行时间(单位时间); 优先权; 状态: PCB指针;
1、可随机输入若干进程,并按优先权排序 2、采用动态优先权调度,从就绪队首选进程运行: 优先权-1/要求运行时间-1 要求运行时间为0时,撤销该进程 3、重新排序,进行下轮调度 4、最好采用图形界面 5、可动态增加进程
6、规定道数,设置后备队列和挂起状态
7、如果内存中进程数少于规定道数,可自动从后备队列通过作业调度选择一作业进入,8、作业调度算法可自行选择
9、被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂并入就绪队列 10、每次调度后,显示各进程状态。
三、实验要求
进程名/PID;
四、实验代码
Pcb:进程控制块,用于保存进程的信息)
2
Reading:就绪队列,进入cpu中执行,6,按优先级顺序,时间片为1s Reserve:后备队列,存放进程,当就绪队列中进程数不足6个,从该队列调出 Suspend:挂起队列,就绪队列中的进程挂起后进入该队列 PcbGUI:程序界面以及执行的核心
}
类Pcb:
public class Pcb {
private String name; //进程名称 private int time; //时间
private int priority; //优先级,越大表明优先级越高 public Pcb(String n , int t, int p){ }
public String getName() { }
public void setName(String name) { }
public int getTime() { }
public void setTime(int time) { }
public int getPriority() { }
public void setPriority(int priority) { }
public void change(){ }
public String toString() { }
return this.getName() + \this.time--; this.priority--; this.priority = priority; return priority; this.time = time; return time; this.name = name; return name; this.name=n; this.time=t; this.priority=p;
3
类Reading:
import java.util.ArrayList; import java.util.Iterator;
public class Reading implements Iterable
private ArrayList
}
return this.readlist;
public ArrayList
public Reading() {
}
this.readlist = new ArrayList
public void addItem(Pcb PcbItem) {
}
this.readlist.add(PcbItem);
public void removeItem(Pcb PCbItem) {
}
this.readlist.remove(PCbItem);
public Pcb getItem(Pcb processPCB) {
}
for (Pcb pcBItem : this.readlist) {
if (pcBItem.getName().equals(pid)) { return pcBItem;
for (Pcb pCbItem : this.readlist) {
if (pCbItem.equals(processPCB)) { return pCbItem; } }
return null;
public Pcb getItem(String pid) {
4
}
} }
return null;
public int getNumberOfItems() {
public String[] getItemsProperties() {
String itemsProperties[] = new String[getNumberOfItems()]; int i = 0; }
return this.readlist.size();
for(Iterator iterator1 = readlist.iterator(); iterator1.hasNext();) { }
return itemsProperties; }
类Reserve:
import java.util.ArrayList; import java.util.Iterator;
public class Reserve implements Iterable
private ArrayList
public Iterator
return this.reservelist.iterator(); reservelist = new ArrayList
return this.readlist.iterator(); }
Pcb stu_Item = (Pcb)iterator1.next(); itemsProperties[i++] = stu_Item.toString();
5
}
}
public void add(Pcb o){ }
public Pcb getfirst(int i){ }
public Pcb getprocess(String n){ }
public int getNumberOfItems() { }
public void removeItem(Pcb PCbItem) { }
public String[] getItemsProperties() {
String itemsProperties[] = new String[getNumberOfItems()]; int i = 0;
this.reservelist.remove(PCbItem);
return this.reservelist.size(); for(Pcb o : reservelist){ }
return null;
if(n.equals(o.getName()))
return o;
return reservelist.get(i); reservelist.add(o);
for(Iterator iterator1 = reservelist.iterator(); iterator1.hasNext();) { }
return itemsProperties; }
Pcb stu_Item = (Pcb)iterator1.next(); itemsProperties[i++] = stu_Item.toString();
6
类Suspend:
import java.util.ArrayList; import java.util.Iterator;
public class Suspend implements Iterable
private ArrayList
public void add(Pcb o){ }
public Iterator
public Pcb getprocess(String n){ }
public int getNumberOfItems() { }
public void removeItem(Pcb PCbItem) { }
public String[] getItemsProperties() {
String itemsProperties[] = new String[getNumberOfItems()]; int i = 0;
this.suspendlist.remove(PCbItem); return this.suspendlist.size(); for(Pcb o : suspendlist){ }
return null;
if(n.equals(o.getName()))
return o;
return this.suspendlist.iterator(); this.suspendlist.add(o);
suspendlist = new ArrayList
for(Iterator iterator1 = suspendlist.iterator(); iterator1.hasNext();) { }
Pcb stu_Item = (Pcb)iterator1.next(); itemsProperties[i++] = stu_Item.toString();
7
return itemsProperties; }
类PcbGUI: import java.awt.*; import java.util.*; import java.awt.event.*;
import javax.swing.*; import javax.swing.event.*;
public class PcbGUI extends JPanel{
/* Window height in pixels */ static private int HEIGHT = 600 ;
static private int RESERVE_LIST_SIZE = 110; static private int RESERVE_LIST_ROWS = 15; static private int READ_LIST_SIZE = 110; static private int READ_LIST_ROWS = 15; static private int SUSPEND_LIST_SIZE = 110; /* Window width in pixels */ static private int WIDTH = 830; }
public Pcb getItem(String pid) { }
for (Pcb pcBItem : this.suspendlist) {
if (pcBItem.getName().equals(pid)) { return pcBItem; } }
return null;
8
static private int SUSPEND_LIST_ROWS = 14; static private int MEMORY_LIST_SIZE = 110; static private int MEMORY_LIST_ROWS = 15; private static JTextField PnameTextField; private JTextField PtimeTextField; private JTextField PpriorityTextField; private JTextField LimitTextField; private JTextField run; private JTextArea STextArea; private JButton Addbutton; private JButton Beginbutton; private JButton Pausebutton; private JButton Suspendbutton; private JButton Exitbutton; private JButton Hsbutton; private JList ReserveList; private JList ReadList; private JList SuspendList; private JList MemoryList;
private Reserve reslist; //后备队列 private Reading realist; //就绪队列 private Suspend slist; //挂起队列
private int Pause; //Pause=1表示运行,Pause=0表示暂停 private boolean flag = false; //控制线程运行 public static void main(String[] args) { }
public PcbGUI(){
Pause = 1;
reslist = new Reserve();
// TODO Auto-generated method stub
JFrame frame = new JFrame(\frame.setContentPane(new PcbGUI());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(WIDTH, HEIGHT); frame.setResizable(true); frame.setVisible(true);
frame.setLocationRelativeTo(null); PnameTextField.requestFocus();
9
realist = new Reading(); slist = new Suspend();
Font x = new Font(\Font f=new Font(\楷体\//设置后备队列
ReserveList = new JList();
ReserveList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); ReserveList.setVisibleRowCount(RESERVE_LIST_ROWS); ReserveList.setFixedCellWidth(RESERVE_LIST_SIZE); JPanel ProcessPanel1 = new JPanel();
ProcessPanel1.setBorder(BorderFactory.createTitledBorder(\ProcessPanel1.add (
new JScrollPane(ReserveList,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
ProcessPanel1.setBounds(10, 10, 150, 370); ProcessPanel1.setBackground(null);
//设置就绪队列 ReadList = new JList();
ReadList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); ReadList.setVisibleRowCount(READ_LIST_ROWS); ReadList.setFixedCellWidth(READ_LIST_SIZE); JPanel ProcessPanel2 = new JPanel();
ProcessPanel2.setBorder(BorderFactory.createTitledBorder(\ProcessPanel2.add (
//设置运行框
JPanel Run = new JPanel();
Run.setBorder(BorderFactory.createTitledBorder(\run = new JTextField(8);
run.setHorizontalAlignment(JTextField.CENTER);
new JScrollPane(ReadList,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
ProcessPanel2.setBounds(160, 10, 150, 370);
10
run.setBorder(BorderFactory.createEmptyBorder());
run.setFont(x); run.setEditable(false); Run.add(run);
Run.setBounds(310, 10, 200, 80);
//设置添加
JPanel AddPanel = new JPanel(); AddPanel.setLayout(null);
AddPanel.setBorder(BorderFactory.createTitledBorder(\AddPanel.setBounds(310,100,200,280); Addbutton = new JButton(\添加(A)\Addbutton.setMnemonic(KeyEvent.VK_A); Addbutton.setFont(f);
Addbutton.setBounds(65, 220, 90, 35); PnameTextField = new JTextField(5); PtimeTextField = new JTextField(5); PpriorityTextField = new JTextField(5); LimitTextField = new JTextField(5);
PnameTextField.setHorizontalAlignment(JTextField.CENTER); PtimeTextField.setHorizontalAlignment(JTextField.CENTER); PpriorityTextField.setHorizontalAlignment(JTextField.CENTER); LimitTextField.setHorizontalAlignment(JTextField.CENTER); PnameTextField.setBounds(110, 35, 60, 23); PtimeTextField.setBounds(110, 75, 60, 23); PpriorityTextField.setBounds(110, 115, 60, 23); LimitTextField.setBounds(110, 155, 60, 23); JLabel NameLabel = new JLabel(\JLabel TimeLabel = new JLabel(\JLabel PriorityLabel = new JLabel(\JLabel LimitLabel = new JLabel(\NameLabel.setBounds(30, 35, 60, 23); TimeLabel.setBounds(30, 75, 60, 23); PriorityLabel.setBounds(30, 115, 60, 23); LimitLabel.setBounds(30, 155, 60, 23); AddPanel.add(Addbutton);
11
AddPanel.add(PnameTextField); AddPanel.add(PtimeTextField); AddPanel.add(PpriorityTextField); AddPanel.add(LimitTextField); AddPanel.add(NameLabel); AddPanel.add(TimeLabel); AddPanel.add(PriorityLabel); AddPanel.add(LimitLabel);
//设置挂起队列
SuspendList = new JList();
SuspendList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); SuspendList.setVisibleRowCount(SUSPEND_LIST_ROWS); SuspendList.setFixedCellWidth(SUSPEND_LIST_SIZE); JPanel ProcessPanel3 = new JPanel();
ProcessPanel3.setBorder(BorderFactory.createTitledBorder(\JPanel ProcessPanel4 = new JPanel(); ProcessPanel4.add (
new JScrollPane(SuspendList,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
Hsbutton = new JButton(\解挂(U)\Hsbutton.setMnemonic(KeyEvent.VK_U); Hsbutton.setFont(f);
ProcessPanel3.add(ProcessPanel4,BorderLayout.NORTH); ProcessPanel3.add(Hsbutton,BorderLayout.SOUTH); ProcessPanel3.setBounds(510, 10, 150, 370);
//设置开始按钮
Beginbutton = new JButton(\开始(B)\Beginbutton.setBounds(650, 415, 90, 35); Beginbutton.setFont(f);
Beginbutton.setMnemonic(KeyEvent.VK_B);
12
//设置暂停按钮
Pausebutton = new JButton(\暂停(P)\Pausebutton.setBounds(470, 415, 90, 35); Pausebutton.setFont(f);
Pausebutton.setMnemonic(KeyEvent.VK_P);
//设置挂起按钮
Suspendbutton = new JButton(\挂起(S)\Suspendbutton.setBounds(470, 490, 90, 35); Suspendbutton.setFont(f);
Suspendbutton.setMnemonic(KeyEvent.VK_S);
//设置退出按钮
Exitbutton = new JButton(\退出(X)\Exitbutton.setBounds(650, 490, 90, 35); Exitbutton.setFont(f);
Exitbutton.setMnemonic(KeyEvent.VK_X);
//设置备注
STextArea = new JTextArea(); STextArea.setBounds(20,18,310,115);
STextArea.setFont(new Font(\STextArea.setBackground(null); STextArea.setEditable(false); JPanel SPanel = new JPanel(); SPanel.setLayout(null);
SPanel.setBorder(BorderFactory.createTitledBorder(\SPanel.setBounds(10, 390, 350, 140); SPanel.add(STextArea);
setLayout(null);
add(ProcessPanel1); add(ProcessPanel2); add(Run); add(AddPanel); add(ProcessPanel3); add(Beginbutton);
13
}
add(Pausebutton); add(Suspendbutton); add(Exitbutton);
//初始添加一些进程
realist.addItem(new Pcb(\realist.addItem(new Pcb(\realist.addItem(new Pcb(\sortReadyPCB();
reslist.add(new Pcb(\reslist.add(new Pcb(\reslist.add(new Pcb(\reslist.add(new Pcb(\reslist.add(new Pcb(\
ReserveList.setListData(reslist.getItemsProperties());
//消息响应函数
Addbutton.addActionListener(new AddListener()); Exitbutton.addActionListener(new ExitListener()); Beginbutton.addActionListener(new BeginListener()); Suspendbutton.addActionListener(new SuspendListener()); Pausebutton.addActionListener(new PauseListener()); Hsbutton.addActionListener(new HsListener());
ReadList.addListSelectionListener(new DisplayListener()); ReserveList.addListSelectionListener(new DisplayListener2()); SuspendList.addListSelectionListener(new DisplayListener1());
//对就绪队列按优先级进行排序 public void sortReadyPCB() {
Reading currentReadyPCB = new Reading(); int num = realist.getNumberOfItems(); if(num > 0) {
for(int i=num; i>=1; i--) {
Iterator readyIterator = realist.iterator(); Pcb currentItem = (Pcb) readyIterator.next(); for( ; readyIterator.hasNext(); ) {
14
}
}
}
}
Pcb nowItem = (Pcb) readyIterator.next();
if(currentItem.getPriority() < nowItem.getPriority()) { }
currentItem = null; currentItem = nowItem;
currentReadyPCB.addItem(currentItem); realist.removeItem(currentItem);
realist = null;
realist = currentReadyPCB;
ReadList.setListData(realist.getItemsProperties());
//线程,CPU处理进程
class newthread extends Thread{
int t;
int TimeSlice; boolean Flag = true; public void run(){
while(Flag){
if(getPause() == 1){ }
if(realist.getNumberOfItems() < 6){
if(reslist.getNumberOfItems() > 0) {
while(realist.getNumberOfItems() < 6) {
if(reslist.getNumberOfItems() > 0) {
while(getPause() == 1){ }
try { }
new Thread().sleep(1000);
// TODO Auto-generated catch block e.printStackTrace();
} catch (InterruptedException e) {
15
}
}
}
Iterator bwackupPCBIterator = reslist.iterator(); Pcb newItem = (Pcb) bwackupPCBIterator.next(); while(bwackupPCBIterator.hasNext() ) {
newItem = (Pcb) bwackupPCBIterator.next(); if(newItem == null) break; if(newItem != null) { Pcb
nowItem
=
new
Pcb(newItem.getName(), newItem.getTime(), newItem.getPriority());
realist.addItem(nowItem); reslist.removeItem(newItem);
ReserveList.setListData(reslist.getItemsProperties());
}
} else break;
sortReadyPCB();
ReserveList.setListData(reslist.getItemsProperties()); Iterator readyIterator = realist.iterator(); Pcb runningItem = null; if(readyIterator.hasNext()) { }
if(runningItem != null) {
t = runningItem.getTime(); TimeSlice = 1;
for(int i=TimeSlice; i>0; i--) {
if(t > 0) {
runningItem.change();
run.setText(runningItem.getName()); t--;
sortReadyPCB(); try {
Thread.sleep(1000);
runningItem = (Pcb) readyIterator.next();
16
}
}
}
}
}
} catch (Exception ee) { }
ee.printStackTrace();
if(t <= 0) { }
if(realist.getNumberOfItems() > 0)
Flag = getFlag(); else Flag = false;
Flag = false;
realist.removeItem(runningItem); runningItem = null; sortReadyPCB();
} else Flag = false; if(Pause == 1) { }
if(getPause() == 0) Flag = true;
while(getPause()==1) { }
try { }
Thread.sleep(1000); ee.printStackTrace(); } catch (Exception ee) {
public boolean getFlag() { }
public int getPause(){ }
//添加按钮的消息响应函数
return Pause; return this.flag;
17
class AddListener implements ActionListener { }
//退出按钮的消息响应函数
class ExitListener implements ActionListener { }
//开始按钮的消息响应函数
class BeginListener implements ActionListener { }
//挂起按钮的消息响应函数
public void actionPerformed(ActionEvent event) { }
ReadList.setListData(realist.getItemsProperties()); Pause = 0;
Thread run = new newthread();
flag = true; run.start();
public void actionPerformed(ActionEvent event) { }
System.exit(0);
public void actionPerformed(ActionEvent event){ }
String str1 = PnameTextField.getText();
int n1 = Integer.parseInt(PtimeTextField.getText()); int n2 = Integer.parseInt(PpriorityTextField.getText()); if(realist.getNumberOfItems()<6){
realist.addItem(new Pcb(str1,n1,n2)); }else{
reslist.add(new Pcb(str1,n1,n2)); }
ReadList.setListData(realist.getItemsProperties()); ReserveList.setListData(reslist.getItemsProperties()); PnameTextField.requestFocus(); PnameTextField.selectAll();
18
class SuspendListener implements ActionListener { public void actionPerformed(ActionEvent event) { String selectedReadyItem = null; String pid = \
if(realist.getNumberOfItems() != 0){ try{ selectedReadyItem = (String) ReadList.getSelectedValue(); if(selectedReadyItem != null) {
StringTokenizer stringtokenizer
=
StringTokenizer(selectedReadyItem, \
pid = stringtokenizer.nextToken(); Pcb selectedItem = realist.getItem(pid); if(selectedItem != null){ Pcb boolItem = slist.getItem(pid);
while(boolItem != null) { pid = \
boolItem = slist.getItem(pid);
} Pcb
newPcb
=
new
selectedItem.getTime(),selectedItem.getPriority())
slist.add(newPcb);
realist.removeItem(selectedItem); sortReadyPCB();
SuspendList.setListData(slist.getItemsProperties());
}
}
} catch (RuntimeException e1) {
// TODO Auto-generated catch block
}
}
}
}
//暂停按钮的消息响应函数
class PauseListener implements ActionListener { public void actionPerformed(ActionEvent event) {
if(Pause == 0){
19 new
Pcb(pid,
}
}
}
flag = false;
Pausebutton.setText(\继续(P)\Pause = 1;
else{ }
flag = true; Pause =0;
Pausebutton.setText(\暂停(P)\
//解挂按钮的消息响应函数
class HsListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
String selectedReadyItem = null; String pid = \
if(slist.getNumberOfItems() != 0){
try{
selectedReadyItem = (String) SuspendList.getSelectedValue(); if(selectedReadyItem != null) {
StringTokenizer
stringtokenizer
=
new
StringTokenizer(selectedReadyItem, \
pid = stringtokenizer.nextToken(); Pcb selectedItem = slist.getItem(pid); if(selectedItem != null){
}else {
reslist.add(new
Pcb(pid,
if(realist.getNumberOfItems() < 6) {
int
realist.addItem(new
n
=
Pcb(pid,
MemoryAllocation(selectedItem.getLimit()); selectedItem.getTime(),
selectedItem.getPriority()
ReadList.setListData(realist.getItemsProperties());
20
selectedItem.getTime(),selectedItem.getPriority()));
}
slist.removeItem(selectedItem);
ReserveList.setListData(realist.getItemsProperties());
}
// TODO Auto-generated catch block
}
SuspendList.setListData(slist.getItemsProperties());
}
}
} catch (RuntimeException e1) { }
}
//display就绪队列中的进程
class DisplayListener implements ListSelectionListener{
public void valueChanged(ListSelectionEvent event) {
if (! ReadList.getValueIsAdjusting()) {
String selectedReadyItem = null; String pid = \String ptime = \String pp = \
selectedReadyItem = (String) ReadList.getSelectedValue(); if(selectedReadyItem != null) { }
StringTokenizer
stringtokenizer1
=
new
StringTokenizer(selectedReadyItem, \
}
pid = stringtokenizer1.nextToken(); ptime = stringtokenizer1.nextToken(); pp = stringtokenizer1.nextToken(); String b = stringtokenizer1.nextToken(); String l = stringtokenizer1.nextToken();
STextArea.setText(\
\
21
}
}
//display挂起队列中的进行
class DisplayListener1 implements ListSelectionListener{
public void valueChanged(ListSelectionEvent event) {
if (! SuspendList.getValueIsAdjusting()) {
String selectedReadyItem = null; String pid = \String ptime = \String pp = \
selectedReadyItem = (String) SuspendList.getSelectedValue(); if(selectedReadyItem != null) { }
StringTokenizer
stringtokenizer1
=
new
StringTokenizer(selectedReadyItem, \
}
//display后备队列中的消息响应函数
class DisplayListener2 implements ListSelectionListener{
public void valueChanged(ListSelectionEvent event) {
if (! ReserveList.getValueIsAdjusting()) {
String selectedReadyItem = null; String pid = \String ptime = \String pp = \
selectedReadyItem = (String) ReserveList.getSelectedValue(); if(selectedReadyItem != null) {
}
}
pid = stringtokenizer1.nextToken(); ptime = stringtokenizer1.nextToken(); pp = stringtokenizer1.nextToken(); String b = stringtokenizer1.nextToken(); String l = stringtokenizer1.nextToken();
STextArea.setText(\
\
22
}
StringTokenizer
stringtokenizer1 = new
StringTokenizer(selectedReadyItem, \ }
}
}
}
pid = stringtokenizer1.nextToken(); ptime = stringtokenizer1.nextToken(); pp = stringtokenizer1.nextToken(); String b = stringtokenizer1.nextToken(); String l = stringtokenizer1.nextToken();
STextArea.setText(\
\
五、程序展示
23
24
25
正在阅读:
操作系统实验一10-02
生日祝福句子_适合生日发的句子08-04
2007年中考语文模拟试卷及答案207-24
卫生院申请投资请示04-10
计算机网络基础(A)答案03-16
心得体会_2022年心得体会范文08-01
中班优秀美术教案《有趣的图形》03-13
毕业设计说明书03-08
- 党课
- 抽水试验方案
- 吴赣昌版高数第六章定积分的应用
- 广东省国土资源厅关于“三旧”改造工作实施意见的通知
- 华南理工 网络网上学习指南随堂练习
- 摩西的休妻律法和耶稣的休妻论
- 《清稗类钞》着述类 性理类 经术类
- 责任心是加强执行力建设的关键
- 数字高清COFDM车载无线图像传系统
- 2011年中考思想品德热点专题
- 2016年云南省中考物理试卷
- 2017中考语文专项复习 现代文阅读专题
- C区施工组织设计(400T) - 图文
- 房屋维修施工组织设计
- 七年级英语(上)一二单元检测(含听力)
- 10年嘉祥三诊测试 - 图文
- 借鉴行为主义学习观,提升文言文教学效率
- IX35提车检查表
- 辽宁省信息系统集成服务商名录2018版1241家 - 图文
- 仿人型机器人总体及臂手部结构设计7
- 操作系统
- 实验
- 锅炉原理课程设计说明书 - 图文
- 小学三年级上册数学期中考试考试质量分析报告
- 2019年落实党风廉政建设年终工作总结(四篇)
- 运输组织论文
- 数据库系统教程(何玉洁 - 李宝安 - 编著)第5章习题参考答案 - 图文
- 化工课后习题答案
- 住房公积金若干问题
- 吉利收购沃尔沃案例分析完美版0 - 图文
- “拒绝噪音,保护宁静”班会教案
- 杭州英国留学 曼彻斯特大学环发学院大解析
- 2014-2015高中英语人教版必修4同步练习:Unit 3 Section
- TCL彩电通病集合
- 《微机原理》模拟试题一 - 图文
- 16秋西南交《管理学原理》在线作业一 辅导资料
- 淤血肝超声 - 图文
- 教育学原理笔记-自己整理
- 食品化学研究与应用的现状及前景展望
- 2017年全国中考语文试题分类汇编《文学常识与名著导读》 - 图文
- 八边形凹凸件的数控加工 - 图文
- 苏教版四年级语文下册第九课《祁黄羊》