




已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
操作系統(tǒng)實驗第一期 項目開發(fā)實現(xiàn)實驗名稱 EXP.1 CPU Scheduling Exp.2 Allocation & Reclaim實驗內(nèi)容 一,選擇一個調(diào)度算法,實現(xiàn)處理機調(diào)度;二,處理機調(diào)度過程中,主存儲器空間的分配和回收;實驗?zāi)康囊?多道系統(tǒng)中,當就緒進程數(shù)大于處理機數(shù)時,須按照某種策略決定哪些進程優(yōu)先占用處理機。本實驗?zāi)M實現(xiàn)處理機調(diào)度,以加深了解處理機調(diào)度的工作;二,幫助了解在不同的存儲管理方式下,應(yīng)怎樣實現(xiàn)主存空間的分配和回收;實驗題目一,(1)設(shè)計一個按照優(yōu)先權(quán)調(diào)度算法實現(xiàn)處理機調(diào)度的程序; (2)設(shè)計按時間片輪轉(zhuǎn)實現(xiàn)處理機調(diào)度的程序;二,在可變分區(qū)管理方式下,采用最先適應(yīng)算法實現(xiàn)主存空間的分配和回收;實驗要求一,(a),PCB內(nèi)容: 進程名/PID; 要求運行時間(單位時間); 優(yōu)先權(quán); 狀態(tài); PCB指針; (因課程內(nèi)容原因,這個指針在設(shè)計中沒用) 1,可隨機輸入若干進程,并按優(yōu)先權(quán)排序; 2,從就緒隊列首選進程運行:優(yōu)先權(quán)-1/ 要求運行時間-1;要求運行時間=0時,撤銷該進程; 3,重新排序,進行下一輪調(diào)度; (b),最好采用圖形界面; (c),可隨時增加進程; (d),規(guī)定道數(shù),設(shè)置后備隊列和掛起狀態(tài)。若內(nèi)存中進程數(shù)少于規(guī)定道數(shù),可自動從后備隊列調(diào)度一作業(yè)進入。被掛起進程如=入掛起隊列,設(shè)置解掛功能用于將指定掛起進程解掛入就緒隊列; (e),每次調(diào)度后,顯示各進程狀態(tài);二,(a),自行假設(shè)主存空間大小,預(yù)設(shè)操作系統(tǒng)所占大小并構(gòu)造未分分區(qū)表; 表目內(nèi)容:起址、長度、狀態(tài)(未分/空表目) (b),結(jié)合實驗一,PCB增加為:PID,要求運行時間,優(yōu)先權(quán),狀態(tài),所需內(nèi)存大小,主存起始位置,PCB指針(失效); (C)采用最先適應(yīng)算法分配主存空間; (D),進程完成后,回收主存,并與相鄰空閑分區(qū)合并;實驗過程及分析1, 初步設(shè)計:2, 詳細設(shè)計: (a),操作系統(tǒng)知識回顧:(1)作業(yè)進入內(nèi)存中,由CPU分配產(chǎn)生PCB屬性,并通過PCB記錄進程狀態(tài),實驗即以PCB代表進程模擬調(diào)度過程;(2)在多道系統(tǒng)中,多道系統(tǒng)中,當就緒進程數(shù)大于處理機數(shù)時,須按照某種策略決定哪些進程優(yōu)先占用處理機,本實驗采用優(yōu)先級;(3),進程調(diào)度時,規(guī)定若就緒隊列進程數(shù)少于6個,則自動從后備隊列調(diào)入一個作業(yè);(4),系統(tǒng)會將占有較多資源、預(yù)期結(jié)果不符合要求的進程自動掛起,并回收所占資源,而本實驗設(shè)置為手動掛起;(5),在適宜條件下,系統(tǒng)會將掛起的進程自動解掛,而且只解掛到就緒隊列;本實驗為簡化操作,設(shè)置為手動解掛,若解掛條件合適(即CPU各種資源可用),則解掛到就緒隊列,并分配內(nèi)存;若解掛條件不適宜,則解掛至后備隊列,但不分配內(nèi)存(實際上這是不對的,因為作業(yè)進入內(nèi)存,由CPU標記PCB后,不能撤銷PCB再返回內(nèi)存,除非該進程執(zhí)行結(jié)束,但本程序為體現(xiàn)解掛的意思,還是錯誤地設(shè)計為可以解掛到后備隊列,讀者需注意,這個功能可以在代碼中注銷,另外也希望有高手可以改進);(b),實驗程序設(shè)計: (1),本實驗采用java語言編程,并實現(xiàn)GUI界面顯示; (2),為體現(xiàn)java語言面對對象程序設(shè)計的特點,實驗設(shè)計為ProcessPCB、MemoryItem類封裝PCB和所分配的內(nèi)存各自的屬性與方法;用ProcessRecords、MemoryRecords類封裝數(shù)組方法;用SingleCPUScheduling實現(xiàn)GUI界面顯示; (3),ProcessPCB類中,定義PCB的進程名、要求運行時間、優(yōu)先級、狀態(tài)、主存起始位置、所需內(nèi)存大小這6個屬性,并定義各屬性的get和set方法,定義equals方法用于對比類的屬性,定義toString方法得到類屬性的字符串,定義run方法封裝優(yōu)先權(quán)-1/ 要求運行時間-1的過程;MemoryItem類中,定義可分分區(qū)表每一可分記錄的主存起始位置、內(nèi)存大小及其get和set方法,定義toString方法得到可在界面顯示的字符串; (4),ProcessRecords封裝PCB數(shù)組的添加元素addItem和刪除元素removeItem方法,并構(gòu)造函數(shù)getItem通過參數(shù)ProcessPCB和String查找數(shù)組元素,定義getNumberOfItems取數(shù)組大小,定義getItemsPriorities方法取所有數(shù)組元素的toString方法用于界面顯示,定義iterator方法取得數(shù)組的迭代器; (5),MemoryRecords用同樣的設(shè)計思想封裝以MemoryItem為數(shù)組元素的各屬性和方法; (6)SingleCPUScheduling類繼承JFrame類,實現(xiàn)界面化顯示;與上面相對應(yīng),實例化ProcessRecords(3次)和MemoryRecords(1次)作為私有變量,分別作為后備隊列、就緒隊列、掛起隊列和內(nèi)存可分分區(qū)表;在界面設(shè)計中,設(shè)計后備隊列、掛起隊列(附帶解掛umount按鈕)、就緒隊列(附帶掛起suspend按鈕)可分分區(qū)表列表顯示框,設(shè)置PCB添加框,附帶添加至后備隊列(addToBackup)、添加至就緒隊列(addToReady)按鈕,以及CPU當前執(zhí)行狀態(tài)顯示框、系統(tǒng)日志顯示框,和開始調(diào)度(systemStart)按鈕,優(yōu)先級和時間片單選按鈕,以及時間片顯示標簽和文本編輯框; (7)界面設(shè)計詳解;后備隊列顯示框用于顯示已添加至后備隊列的ProcessRecords屬性信息,其中主存起始位置默認為-1,表示未分配;掛起隊列顯示框用于顯示從就緒隊列掛起的PCB,其中屬性“主存起始位置”(MemoryBase)將由非負數(shù)變?yōu)?1,表示掛起后收回內(nèi)存;就緒隊列顯示框中顯示就緒隊列屬性,其中“主存起始位置”均為非負,表示一分配內(nèi)存;PCB信息添加框分列PCB6個屬性顯示標簽和可編輯文本框,和添加按鈕,用于添加PCB;系統(tǒng)日志顯示框附屬時間片顯示標簽和可編輯文本編輯框,可由用戶決定時間片大小; 對于實驗一,界面如下: Pause和reset暫時失效,將在實驗2中完成;以上由SingleCPUScheduling001.java(另需ProcessPCB.java和PCBRdecords.java)(8)附屬功能添加完善;最重要的是為程序添加線程,是程序能以停頓一段時間的頻率自動此技術(shù)是參閱資料和高手的代碼學(xué)來的,本人將在第二期的代碼分析和評估中給出,并鄭重聲明、尊重原著的知識產(chǎn)權(quán)!運行;后備隊列、掛起隊列添加total顯示標簽和不可編輯文本顯示框,用于顯示各自數(shù)組中元素數(shù)目,掛起隊列附屬刪除(remove)按鈕,可刪除掛起隊列中的元素;后備、掛起、就緒隊列均添加監(jiān)聽器,用于響應(yīng)用戶單擊操作,可以在PCB信息添加框顯示用戶單擊的那一條PCB的信息;PCB信息添加框附屬reset按鈕,用于一鍵清空信息框中信息,方便輸入;系統(tǒng)日志面板附屬系統(tǒng)暫停(systemPause)和系統(tǒng)重置(systemReset)按鈕,分別用于暫停運行(方便用戶觀察當前運行結(jié)果)和重置系統(tǒng)(方便用戶重復(fù)使用程序,免去關(guān)閉后重啟本程序的麻煩);最終界面如圖:實驗結(jié)果報告級分析1, 程序完成了實驗所有的基本要求;2, 本程序還存在一些技術(shù)上的問題,使得程序不能盡善盡美;如,PCB信息添加框沒有“隨機置入就緒隊列”功能,添加PCB信息仍顯得繁瑣;就緒隊列的掛起功能在程序自動運行時,存在反應(yīng)異常(反應(yīng)延遲或直接無反映);可分分區(qū)表只顯示了當前可分的內(nèi)存,沒有顯示已分的PCB及其對應(yīng)內(nèi)存使用情況,且沒有利用圖形和豐富的顏色來更好的展示;時間片設(shè)計還需要改進,使用效率不高;系統(tǒng)重置功能存在響應(yīng)延遲的問題;另外,界面不夠美觀;還需要不斷改進;實驗感想通過這次實驗,我對操作系統(tǒng)的進程調(diào)度和內(nèi)存分配管理有了更加深入的了解,對操作系統(tǒng)內(nèi)部的工作原理有了進一步的認識;通過編程,也鞏固了我的程序設(shè)計和代碼編寫的能力,實驗過程中遇到的各種問題以及解決問題的過程與方法,都是我獲益匪淺;同時,程序的不完善,也將促使我在課程之后,繼續(xù)學(xué)習(xí)、理解課程內(nèi)容,并盡一切努力不斷完善程序,做到盡善盡美;程序代碼完整版(初學(xué)java,菜鳥級別,當然是將所學(xué)的全部照辦照抄,實為臃腫,可為初學(xué)者引以為戒,注意代碼質(zhì)量?。┻@里謹貼出十分臃腫的代碼,僅供初學(xué)者交流經(jīng)驗,重在開發(fā)的思想,了解開發(fā)的流程,而01版(精簡版)代碼在后面;ProcessPCB.javapackage src;public class ProcessPCB /backupBAK 后備 ready 就緒 suspend 掛起 memory內(nèi)存private String PID;private int RequiredTime;/private String Priority;private int Priority;private String Status;private int MwmoryBase = 0000;private int MemoryLimit;/private String PCBPointer;public ProcessPCB(String initpID, int initRTime, int initpriority, String status, int initBase, int initLimit) this.PID = initpID;this.RequiredTime = initRTime;this.Priority = initpriority;this.Status = status;this.MwmoryBase = initBase;this.MemoryLimit = initLimit;public String getPID() if(this.PID = null)return ;elsereturn this.PID;public void setPID(String pid初學(xué)get和set方法,總以為都要用;但在本設(shè)計中沒用到,只是擺設(shè)) if(pid = null)this.PID = ;elsethis.PID = pid;public int getRequiredTime() return this.RequiredTime;public void setRequiredTime(int time) this.RequiredTime = time;public int getPriority() return this.Priority;public void setPriority(int priority) this.Priority = priority;public String getStatus() if(this.Status = null)return ;elsereturn this.Status;public void setStatues(String statues) if(statues = null)this.Status = ;elsethis.Status = statues;public int getMemoryBase() return this.MwmoryBase;public void setMemoryBase(int base) this.MwmoryBase = base;public int getMemoryLimit() return this.MemoryLimit;public void setMemoryLimit(int limit) this.MemoryLimit = limit;public boolean equals(ProcessPCB pcb) if(pcb.getPID() = this.getPID() return true;else return false;public String toString() return this.getPID() + _ + this.getRequiredTime() + _ + this.getPriority() + _ + this.getStatus() + _ + this.getMemoryBase() + _ + this.getMemoryLimit() + n;public void run() this.RequiredTime = this.RequiredTime-1;this.Priority = this.Priority-1;MemoryItem.javapackage src;public class MemoryItem private int memoryBase=0;private int memoryLimit=0;private int availableStatus=0;public MemoryItem(int initMemoryBase, int initMemoryLimit) this.memoryBase = initMemoryBase;this.memoryLimit = initMemoryLimit;public int getMemoryBase() return this.memoryBase; public void setMemoryBase(int base) this.memoryBase = base; public int getMemoryLimit() return this.memoryLimit; public void setMemoryLimit(int limit) this.memoryLimit = limit; public int getStatus() return this.availableStatus; public void setStatus(int status) this.memoryBase = status; public String toString() return this.getMemoryBase() + _ + this.getMemoryLimit() + n; PCBRecords.javapackage src;import java.util.ArrayList;import java.util.Iterator;public class PCBRecords implements Iterable private ArrayList PCBItems; public ArrayList getPCBItems() return this.PCBItems; public PCBRecords() this.PCBItems = new ArrayList(); public void addItem(ProcessPCB PcbItem) this.PCBItems.add(PcbItem); public void removeItem(ProcessPCB PCbItem) this.PCBItems.remove(PCbItem); public ProcessPCB getItem(ProcessPCB processPCB) for (ProcessPCB pCbItem : this.PCBItems) if (pCbItem.equals(processPCB) return pCbItem; return null; public ProcessPCB getItem(String pid) for (ProcessPCB pcBItem : this.PCBItems) if (pcBItem.getPID().equals(pid) return pcBItem; return null; public int getNumberOfItems() return this.PCBItems.size(); public String getItemsProperties() String itemsProperties = new StringgetNumberOfItems(); int i = 0; for(Iterator iterator1 = PCBItems.iterator(); iterator1.hasNext();) ProcessPCB stu_Item = (ProcessPCB)iterator1.next(); itemsPropertiesi+ = stu_Item.toString(); return itemsProperties; public Iterator iterator() return this.PCBItems.iterator();MemoryRecords.javapackage src;import java.util.ArrayList;import java.util.Iterator;public class MemoryRecords implements Iterable private ArrayList memoryItems;public Iterator iterator() / TODO Auto-generated method stubreturn this.memoryItems.iterator(); public ArrayList getMemoryItems() return this.memoryItems; public MemoryRecords() this.memoryItems = new ArrayList(); public void addItem(MemoryItem newMemoryItem) this.memoryItems.add(newMemoryItem); public void removeItem(MemoryItem momoryItem) this.memoryItems.remove(momoryItem); public MemoryItem getMomoryItem(MemoryItem item) for(MemoryItem mItem : this.memoryItems) if(mItem.equals(item) return mItem; return null; public MemoryItem getMemoryItem(int base) for(MemoryItem mItem : this.memoryItems) if(mItem.getMemoryBase() = base) return mItem; return null; public int getNumberOfItems() return this.memoryItems.size(); public String getItemsProperties() String itemsProperties = new StringgetNumberOfItems(); int i=0; for(Iterator iterator1 = this.memoryItems.iterator(); iterator1.hasNext(); ) MemoryItem mmItem = (MemoryItem) iterator1.next(); itemsPropertiesi+ = mmItem.toString();/? /System.out.println(itemsProperties + n); if(itemsProperties = null) itemsProperties0 = ; return itemsProperties; SingleCPUSchedulingGUI001.Javaimport java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import src.SingleCPUSchedulingGUI001.AddToBAKListener;import src.SingleCPUSchedulingGUI001.AddToReadyListener;import src.SingleCPUSchedulingGUI001.RemoveListener;import src.SingleCPUSchedulingGUI001.ResetListener;import src.SingleCPUSchedulingGUI001.ResetSystemListener;import src.SingleCPUSchedulingGUI001.StartSystemListener;import src.SingleCPUSchedulingGUI001.SuspendListener;import src.SingleCPUSchedulingGUI001.SystemPauseListener;import src.SingleCPUSchedulingGUI001.UmountListener;import src.SingleCPUSchedulingGUI001.priotiryListener;import src.SingleCPUSchedulingGUI001.timeslicListener;import java.io.*;import java.text.*;public class SingleCPUSchedulingGUI001 extends JFrame private int systemStatues; /注意static 屬性 /*define 0-system prepare status-system reset and re-prepare 1-system start 2-system pause 3-system stop*/* Standar error stream */static private PrintWriter stdErr = new PrintWriter(System.err, true);static private int WIDTH = 600, HEIGHT = 700; / the size of the Frame 主面板 /* 各列表對應(yīng)的面板規(guī)格*/*對應(yīng)各名詞釋義 backupBAK 后備 ready 就緒 suspend 掛起 memory內(nèi)存 */static private int BackupBAK_CELL_SIZE = 250, BackupBAK_LIST_ROWS = 10;/后備隊列static private int Suspend_CELL_SIZE = 250, Suspend_LIST_ROWS = 10; /掛起隊列static private int Ready_CELL_SIZE = 200, Ready_LIST_ROWS = 6; /就緒隊列static private int CPU_ROWS = 10, CPU_COLS = 22; /CPU面板static private int STATUS_ROWS = 8, STATUS_COLS = 30; /系統(tǒng)狀態(tài)面板 private int timeslice = 1; /設(shè)置時間片大小 private int systemStatus=0; /設(shè)置系統(tǒng)狀態(tài) 0系統(tǒng)預(yù)備狀態(tài),等待開始,1系統(tǒng)運行狀態(tài),2系統(tǒng)暫停狀態(tài)static private int TOTAL_TEXTFIELD_SIZE = 10; / Size total text field 記錄各隊列元素個數(shù)private JList backupList, suspendList, readyList; /各隊列相對應(yīng)的數(shù)組列表 /進程添加框中的添加至后備隊列,添加至就緒隊列,重置Buttonprivate JButton addToBAKButton, addToReadyButton, resetButton; /就緒隊列框中的掛起,掛起隊列框中的解掛,刪除Buttonprivate JButton suspendButton, umountButton, removeButton; /Status面板中的啟動系統(tǒng),重置系統(tǒng)Buttonprivate JButton startButton, pauseButton, resetSyatemButton; /優(yōu)先級和時間片單選鈕及時間片顯示框private JRadioButton priorityJRB, timesliceJRB;private JLabel timesliceSizeLabel; private JTextField timesliceJtf; /后備面板、進程添加面板、掛起面板、內(nèi)存面板private JPanel backupBAKPanel, PCBItemPanel, suspendedPanel; /后備隊列、掛起隊列元素總數(shù)標簽private JLabel backupTotalLabel, suspendTotalLabel; /進程信息標簽 進程編號PID,所需運行時間requiredTime,優(yōu)先級priority,當前狀態(tài)statues,內(nèi)存中的基址base,所需內(nèi)存大小limitprivate JLabel PIDLabel, requiredTimeLabel, priorityLabel, statuesLabel; /后備隊列、掛起隊列元素總數(shù)文本框(不可編輯)private JTextField backupTotalTextField, suspendTotalTextField;/進程信息文本框 PID(可編輯),requiredTime(可編輯),priority(可編輯),status(不可編輯),base(不可編輯),limit(可編輯)private JTextField PIDTextField, requiredTimeTextField, priorityTextField, statusTextField; /CPU狀態(tài)顯示文本域(不可編輯),status信息文本域(用于現(xiàn)實程序每一步的操作和影響,不可編輯)private JTextArea CPUTextArea, statuesTextArea;/后備隊列PCB數(shù)組,就緒、掛起,內(nèi)存(可分分區(qū)表)PCBRecords backupPCB, readyPCB, suspendedPCB;public static void main(String args) throws IOException / TODO Auto-generated method stubnew SingleCPUSchedulingGUI001().initFrame();public void initFrame() backupList = new JList();backupList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);backupList.setVisibleRowCount(BackupBAK_LIST_ROWS);backupList.setFixedCellWidth(BackupBAK_CELL_SIZE);suspendList = new JList();suspendList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);suspendList.setVisibleRowCount(Suspend_LIST_ROWS);suspendList.setFixedCellWidth(Suspend_CELL_SIZE);readyList = new JList();readyList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);readyList.setVisibleRowCount(Ready_LIST_ROWS);readyList.setFixedCellWidth(Ready_CELL_SIZE);suspendButton = new JButton(Suspend);addToBAKButton = new JButton(AddToBAK);addToReadyButton = new JButton(AddToReady);resetButton = new JButton(Reset);umountButton = new JButton(Umount);removeButton = new JButton(Remove);startButton = new JButton(StartSchuliding);pauseButton = new JButton(Pause);resetSyatemButton = new JButton(ResetSystem);priorityJRB = new JRadioButton(Priority, true);timesliceJRB = new JRadioButton(Timeslice);backupTotalLabel = new JLabel(Total:);backupTotalTextField = new JTextField(0, TOTAL_TEXTFIELD_SIZE);backupTotalTextField.setEditable(false);suspendTotalLabel = new JLabel(Total:);suspendTotalTextField = new JTextField(0, TOTAL_TEXTFIELD_SIZE);suspendTotalTextField.setEditable(false);timesliceSizeLabel = new JLabel(Timeslice);timesliceJtf = new JTextField(3, 5);timesliceJtf.setEditable(true);CPUTextArea = new JTextArea(CPU_ROWS, CPU_COLS);CPUTextArea.setEditable(false);statuesTextArea = new JTextArea(STATUS_ROWS, STATUS_COLS);statuesTextArea.setEditable(false);/* north panel*/JPanel northPanel = new JPanel(new BorderLayout();JPanel northPanel = new JPanel(new GridLayout(1, 3);/JPanel north = new JPanel(new BorderLayout(); / ProcessPCB item information Panel PCBItemPanel = new JPanel(new BorderLayout();PCBItemPanel.setBorder(BorderFactory.createTitledBorder(PCBItem Information);JPanel PCBItemButtonJPanel = new JPanel(new GridLayout(3, 1);PCBItemButtonJPanel.add(addToBAKButton);PCBItemButtonJPanel.add(addToReadyButton);PCBItemButtonJPanel.add(resetButton);PCBItemPanel.add(this.initPCBItemPanel(), BorderLayout.CENTER);PCBItemPanel.add(PCBItemButtonJPanel, BorderLayout.SOUTH); /backupBAKList Panel backupBAKPanel = new JPanel(new BorderLayout();backupBAKPanel.setBorder(BorderFactory.createTitledBorder(BackupList); JPanel backupTotalPAnel = new JPanel(); backupTotalPAnel.add(backupTotalLabel); backupTotalPAnel.add(backupTotalTextField); backupBAKPanel.add (new JScrollPane(backupList,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER); backupBAKPanel.add(backupTotalPAnel, BorderLayout.SOUTH); / north.add(backupBAKPanel, BorderLayout.WEST);/ north.add(PCBItemPanel, BorderLayout.CENTER); / SuspendList Panel suspendedPanel = new JPanel(new BorderLayout(); suspendedPanel.setBorder(BorderFactory.createTitledBorder(SuspendList); JPanel suspendedTotalPAnel = new JPanel(); suspendedTotalPAnel.add(suspendTotalLabel); suspendedTotalPAnel.add(suspendTotalTextField); JPanel suspendComponentPanel = new JPanel(new GridLayout(1, 2); suspendComponentPanel.add(umountButton); suspendComponentPanel.add(removeButton); suspendedPanel.add (suspendedTotalPAnel, BorderLayout.NORTH); suspendedPanel.add (new JScrollPane(suspendList,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER); suspendedPanel.add(suspendComponentPanel, BorderLayout.SOUTH); / northPanel.add(north, BorderLayout.CENTER);/ northPanel.add(suspendedPanel, BorderLa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國信用卡閱讀器行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 2025至2030中國中央預(yù)訂系統(tǒng)行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國一次性餐勺行業(yè)發(fā)展分析及發(fā)展前景與投資報告
- 四川宜賓2024-2025學(xué)年高二語文上冊期中試卷
- 剖腹產(chǎn)術(shù)后腰腹護理
- 2025至2030飛行員手表行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 腫瘤醫(yī)院醫(yī)療綜合樓項目節(jié)能評估報告
- 招聘消防員課件
- 宮頸癌篩查健康教育宣傳
- 報復(fù)心理健康課件
- 中醫(yī)藥健康管理服務(wù)流程
- 2024年教師招聘考試-中學(xué)美術(shù)教師招聘筆試歷年真題薈萃含答案
- 21CFR820美國FDA質(zhì)量體系(QS)法規(guī)醫(yī)療器械良好生產(chǎn)規(guī)范(中文)
- 繼電保護配置及整定計算
- 初高中物理銜接課件
- 血管導(dǎo)管相關(guān)血流感染預(yù)防與控制
- 汽車電氣工學(xué)一體化學(xué)生工作頁
- 工程造價咨詢服務(wù)方案(技術(shù)方案)
- 中國人的規(guī)矩
- 像科學(xué)家一樣思考
- 飛機艙門及撤離滑梯-空客320型飛機艙門結(jié)構(gòu)及操作方法
評論
0/150
提交評論