資源簡(jiǎn)介
設(shè)計(jì)一個(gè)SP00LING輸出進(jìn)程和兩個(gè)請(qǐng)求輸出的用戶進(jìn)程,以及一個(gè)SP00LING輸出服務(wù)程序。當(dāng)請(qǐng)求輸出的用戶進(jìn)程希望輸出一系列信息時(shí),調(diào)用輸出服務(wù)程序,由輸出服務(wù)程序?qū)⒃撔畔⑺腿胼敵鼍4龅揭粋€(gè)輸出結(jié)束標(biāo)志時(shí),表示進(jìn)程該次的輸出文件輸出結(jié)束。之后,申請(qǐng)一個(gè)輸出請(qǐng)求塊(用來(lái)記錄請(qǐng)求輸出的用戶進(jìn)程的名字、信息在輸出井中的位置、要輸出信息的長(zhǎng)度等),等待SP00LING進(jìn)程進(jìn)行輸出。
SP00LING輸出進(jìn)程工作時(shí),根據(jù)請(qǐng)求塊記錄的各進(jìn)程要輸出的信息,將其實(shí)際輸出到打印機(jī)或顯示器。這里,SP00LING輸出進(jìn)程與請(qǐng)求輸出的用戶進(jìn)程可并發(fā)運(yùn)行。
(1)功能分析
當(dāng)輸入“第一個(gè)用戶進(jìn)程的請(qǐng)求為:”,“第二個(gè)用戶進(jìn)程的請(qǐng)求為:”后,按下“確定”鍵,再右側(cè)文本區(qū)中將顯示兩個(gè)請(qǐng)求輸出的用戶進(jìn)程請(qǐng)求的數(shù)據(jù),以及SPOOLING輸出進(jìn)程輸出的數(shù)據(jù)。其中兩個(gè)請(qǐng)求輸出的用戶進(jìn)程的調(diào)度的概率各為0.45,SPOOLING輸出進(jìn)程的調(diào)度為0.10,該調(diào)度以隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)數(shù)來(lái)模擬。
(2)進(jìn)程狀態(tài)
進(jìn)程基本狀態(tài)有3種,分別為可執(zhí)行、等待和結(jié)束。可執(zhí)行態(tài)就是進(jìn)程正在運(yùn)行或等待調(diào)度的狀態(tài);等待狀態(tài)又分為等待狀態(tài)1、等待狀態(tài)2和等待狀態(tài)3。
狀態(tài)變化的條件為:
①進(jìn)程執(zhí)行完成時(shí),置為“結(jié)束”態(tài)。
②服務(wù)程序在將輸出信息送輸出井時(shí),如發(fā)現(xiàn)輸出井已滿,將調(diào)用進(jìn)程置為“等待狀態(tài)1”。
③SP00LING進(jìn)程在進(jìn)行輸出時(shí),若輸出井空,則進(jìn)入“等待狀態(tài)2”。
④SP00LING進(jìn)程輸出一個(gè)信息塊后,應(yīng)立即釋放該信息塊所占的輸出井空間,并將正在等待輸出的進(jìn)程置為“可執(zhí)行狀態(tài)”。
⑤服務(wù)程序在輸出信息到輸出井并形成輸出請(qǐng)求信息塊后,若SP00LING進(jìn)程處于等待態(tài),則將其置為“可執(zhí)行狀態(tài)”。
⑥當(dāng)用戶進(jìn)程申請(qǐng)請(qǐng)求輸出塊時(shí),若沒(méi)有可用請(qǐng)求塊時(shí),調(diào)用進(jìn)程進(jìn)人“等待狀態(tài)3”。

代碼片段和文件信息
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.*;
import?javax.swing.BorderFactory;
import?javax.swing.border.Border;
public?class?Newframe?implements?ActionListener{
private?Spooling?spooling;
private?Process?pro;
Jframe?f;
JPanel?ppnpcpc1pc2pc3pepe1pe2pe3;
Border?border_pc1;
Border?border_pc2;
Border?border_pc3;
Border?border_pc1_titled;
Border?border_pc2_titled;
Border?border_pc3_titled;
JLabel[]?label;
JButton?button;
JButton?cancel;
JButton?watch;
JTextField[]?textfield;
static?TextArea[]?area;
JProgressBar?bar;
JProgressBar?bar1;
JProgressBar?bar2;
Rectangle?rect;
Rectangle?rect1;
Rectangle?rect2;
Newframe()
{
f=new?Jframe(“SP00LING假脫機(jī)輸入輸出技術(shù)模擬“);
label=new?JLabel[2];
label[0]=new?JLabel(“用戶一進(jìn)程請(qǐng)求個(gè)數(shù):“);
label[1]=new?JLabel(“用戶二進(jìn)程請(qǐng)求個(gè)數(shù):“);
button=new?JButton(“確定“);
cancel=new?JButton(“重置“);
watch=new?JButton(“查看詳細(xì)信息“);
textfield=new?JTextField[2];
textfield[0]=new?JTextField(15);
textfield[1]=new?JTextField(15);
area=new?TextArea[3];
for(int?i=0;i<3;i++)?
{
area[i]=new?TextArea(6120);
area[i].setEditable(false);
area[i].setBackground(Color.WHITE);
}
// area[0].setBackground(Color.PINK);
// area[1].setBackground(Color.YELLOW);
// area[2].setBackground(Color.GREEN);
p=new?JPanel();
pn=new?JPanel();
pc=new?JPanel();
pc1=new?JPanel();
pc2=new?JPanel();
pc3=new?JPanel();
pe=new?JPanel();
pe1=new?JPanel(new?FlowLayout(FlowLayout.LEFT));
pe2=new?JPanel(new?FlowLayout(FlowLayout.LEFT));
pe3=new?JPanel(new?FlowLayout(FlowLayout.LEFT));
border_pc1=BorderFactory.createLoweredBevelBorder();
????????border_pc1_titled=BorderFactory.createtitledBorder(border_pc1“用戶一進(jìn)程請(qǐng)求輸出的數(shù)據(jù):“);
????????border_pc2=BorderFactory.createLoweredBevelBorder();
????????border_pc2_titled=BorderFactory.createtitledBorder(border_pc2“用戶二進(jìn)程請(qǐng)求輸出的數(shù)據(jù):“);
????????border_pc3=BorderFactory.createLoweredBevelBorder();
????????border_pc3_titled=BorderFactory.createtitledBorder(border_pc3“SPOOLING請(qǐng)求輸出服務(wù)進(jìn)程:“);
p=new?JPanel(new?BorderLayout(1010));
pn.add(label[0]);pn.add(textfield[0]);
pn.add(label[1]);pn.add(textfield[1]);
pn.add(button);button.addActionListener(this);
pn.add(cancel);cancel.addActionListener(this);
pn.add(watch);watch.addActionListener(this);
pc.setLayout(new?GridLayout(31));
pc1.setBorder(border_pc1_titled);
pc2.setBorder(border_pc2_titled);
pc3.setBorder(border_pc3_titled);
pc1.add(area[0]);
pc2.add(area[1]);
pc3.add(area[2]);
pc.add(pc1);
pc.add(pc2);
pc.add(pc3);
? bar=new?JProgressBar(JProgressBar.HORIZONTAL0100);???//總進(jìn)度條橫向
bar1=new?JProgressBar(JProgressBar.HORIZONTAL0100);???//用戶一進(jìn)度條橫向
bar2=new?JProgressBar(JProgressBar.HORIZONTAL0100);???//用戶二進(jìn)度條橫向
bar.setStringPainted(true);
bar1.setStringPainted(true);
bar2.setStringPainted(true);
pe.setLayout(new?GridLa
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????11791??2011-06-30?15:00??sooping\Newfr
?????文件????????884??2011-06-29?04:40??sooping\Process.java
?????文件???????6580??2011-06-30?08:54??sooping\Spooling.java
?????文件??????22528??2011-08-19?09:56??sooping\需求分析.doc
?????目錄??????????0??2011-08-19?09:56??sooping
-----------?---------??----------?-----??----
????????????????41783????????????????????5
評(píng)論
共有 條評(píng)論