进程管理器课程设计

进程管理器课程设计
进程管理器课程设计

进程管理器课程设计

题目:进程管理器姓名:赵王正

目录

一、需求与功能分析 (3)

二、系统总体框架 (4)

2.1 系统框架图 (4)

2.2 各功能模块的详细说明 (4)

三、模块设计与分析 (5)

3.1 获取进程模块 (5)

3.2 启动新进程模块 (6)

3.3 终止进程模块 (8)

3.4 退出模块 (10)

四、类的设计与分析 (11)

4.1、CShowAllProcessApp 类 (11)

4.2 CaboutDlg 类 (11)

4.3、CshowAllProcessDlg 类 (12)

4.4、CSXButton 类 (13)

六、功能测试 (15)

七、存在的不足与对策 (18)

八、程序源代码 (19)

一、需求与功能分析

我们的电脑需要我们去了解它的运行状况,掌握和管理它的进程,并对其异常情况给予操作和控制,进程管理器就像是我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以了解到电脑所有进程运行状况,并对运行的进程加于管理和控制,正如在本实验中,启动进程管理器后,可以通过”获取进程”功能来获得本计算机启动的进程,以及与该进程相关的信息,其中包括的信息有:进程映像名称,进程开启的线程数,进程的PID 以及进程的优先数,我们可以通过这些信息来了解计算机中每个进程的使用状况。同时我们可以在进程管理器上选中一个要终止的的进程,点击“终止进程”功能按钮,该进程被终止执行并退出进程列表,其中还包括了自动刷新的功能,此按钮实现的功能正如我们电脑任务管理器的“进程”功能,当电脑执行程序不能通过关闭窗口进行正常的关闭时,可以借助此办法来关闭进程。我们还可以通过这个进程管理器来启动新的进程,当我们要在进程管理器里启动新的进程时,只要点击“启动新进程”按键,则会弹出“打开进程”对话框,我们可以通过对话框里的“浏览”窗口选择要打开的新进程,这是任务管理器里没有实现的功能,通过这个功能我们在管理计算机时变得更加灵活方便,也使进程管理的功能更加完善。在退出此进程管理器时候,只要选择“退出”功能按钮则可关闭进程管理器,快速退出管理器的界面。本管理器设计比较简洁,操作灵活,使用简单,可以为我们管理和控制计算机的进程提供了一个简便的方法,是我们控制本计算机进程和了解计算机进程情况的良好助手。

二、系统总体框架

2.1 系统框架图

本系统设计比较简洁,用MFC 来做界面,实现了四个功能,显示四类与进程相关的信息,具体的总体框架图如图1 所示:

\

图1 总体框架图

2.2 各功能模块的详细说明

本系统实现了四大功能,分别包括了:获取进程、启动新进程、终止进程和退出管理器,各功能模块的详细说明如下:

(1)获取进程。点击获取进程后,它能自动获取计算机的所有进程,并显示进程的相关信息,其中包括的信息有:进程映像名称,进程开启的线程数,进程的PID 以及进程的优先数,通过这一功能,我们能了解进程的相关情况。

(2)启动新进程。点击“启动新进程”按钮,进入“打开进程”对话框,在“浏览”窗口里选择任意一个应用程序,则能在管理器里直接启动我们所选的进程。

(3)终止进程。当我们遇到某些软件在关闭窗口时不能直接关闭,这时可以在进程管理器的“终止进程”里找到该进程并将其终止,这一功能实现的是类似于任务管理器的“进程”选项所具有的功能。

(4)退出管理器。当对管理器操作做完毕时,直接点击“退出管理器“按钮则可关闭管理器。

三、模块设计与分析

本软件实现了进程管理的三大功能,其中主要用到了三大函数,包括获取进程函数“OnGetProcess”、启动新进程函数“Ononrun”、终止进程函数“OnStopProcess”以及退出管理器函数“OnBnClickedCancel”,以下是对每个程序的详细设计:

3.1 获取进程模块

该模块使用到的控件如表1:

在IDOK控件上建立事件OnGetProcess(),当用户点击“获取进程”按扭时事件发生,进程管理器可以获取计算机的所有进程。

函数源代码如下:

void CShowAllProcessDlg::OnGetProcess() //获取进程的消息处理函数

{ // TODO: Add your control notification handler code here HANDLE Snapshot; Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息

PROCESSENTRY32 processListStr; //获得进程的信息

processListStr.dwSize=sizeof(PROCESSENTRY32);

BOOL return_value;

return_value=Process32First(Snapshot,&processListStr);

//获得系统进程链表中第一个进程的信息

m_showlist.DeleteAllItems();

int i=0;//item index 5

while(return_value)

{

m_showlist.InsertItem(i,processListStr.szExeFile,0); //插入第一项,从零开始插入

CString s;

s.Format("%d",https://www.360docs.net/doc/5417429820.html,tThreads); //输出线程

m_showlist.SetItemText(i,1,s);

s.Format("%d",processListStr.th32ParentProcessID); //输出ID

m_showlist.SetItemText(i,2,s);

s.Format("%d",processListStr.pcPriClassBase); //输出优先数

m_showlist.SetItemText(i,3,s);

int memory=https://www.360docs.net/doc/5417429820.html,tThreads; //写入内存

m_ProcessIndex[i]=processListStr.th32ProcessID;//save ID into array to

teminate return_value=Process32Next(Snapshot,&processListStr); //获得系统进程链表中下一个进程的信息

i++;

}

}

功能实现的流程图如图2所示:

图2 获取进程流程图

3.2 启动新进程模块

该模块使用到的控件情况如表2:

void CShowAllProcessDlg::Ononrun() //启动新进程的消息处理函数

{

// TODO: Add your control notification handler code here

//加载动态链接库

CString pszDllName="shell32.dll";

HINSTANCE hLib = ::LoadLibrary(pszDllName); // 定义一个句柄,获取的dll文件,是相对路径,和.exe文件在同一个目录下

typedef void (__stdcall *pRunFileDlg)(HWND, HICON, LPCTSTR, LPCTSTR, LPCTSTR, UINT); pRunFileDlg RunFileDlg;

if (hLib==NULL) // 若hLib为空,加载失败,hLib不为空,加载成功

{

return ;

}

RunFileDlg = (pRunFileDlg)GetProcAddress(hLib, (char *)61);

CString name ="打开进程";

CString sss = "请输入程序,文件夹,文档或其它东西。";

LPWSTR wname=new WCHAR[100];

LPWSTR wsss=new WCHAR[100];

memset(wname,0,sizeof(WCHAR)*100);

memset(wsss,0,sizeof(WCHAR)*100);

MultiByteToWideChar //多字节字符到宽字符转换函数

(CP_ACP, // ANSI转换时所用的代码页

MB_PRECOMPOSED, // character-type options

name, // address of string to map

name.GetLength(), // number of bytes in string

wname, // address of wide-character buffer

100

);

MultiByteToWideChar //多字节字符到宽字符转换函数

(CP_ACP, // ANSI转换时所用的代码页

MB_PRECOMPOSED, // character-type options

sss, // address of string to map

sss.GetLength(), // number of bytes in string

wsss, // address of wide-character buffer

100

);

if(RunFileDlg!=NULL)

{

RunFileDlg(this->GetSafeHwnd(),NULL,NULL,(LPCTSTR)wname,(LPCTSTR)wsss,0x02); }

::FreeLibrary(hLib); //函数运行完毕后,卸载dll文件

}

功能实现的流程图如图3所示:

图3 启动新进程流程图

3.3 终止进程模块

该模块使用到的控件情况表如表1:

在IDC_STOP控件上建立事件OnStopProcess (),当用户选中其中一个进程,并点击“终止进打开进程选择要启动的程序hLib 是否为空加载文件函数运

行完毕,卸载dll 文件N 结束Y 10 程”按扭时事件发生,所选中的进程被终止,进程列表被更新。函数源代码如下:

void CShowAllProcessDlg::OnStopProcess() //终止进程的消息处理

{

/ TODO: Add your control notification handler code here

POSITION pos = m_showlist.GetFirstSelectedItemPosition(); //要选择的进程所处的位置

int currentSelect=m_showlist.GetNextSelectedItem(pos); //当前选中的行

if(currentSelect>0)

{

//选择某项

CString FileBuffer;//获得进程的可执行文件的文件名

FileBuffer=CString(TEXT("确实要终止进程

")+m_showlist.GetItemText(currentSelect,0)+TEXT("?"));

if(AfxMessageBox(FileBuffer,MB_OKCANCEL,0)==IDOK)

{//先获得该进程句柄,通过进程标识

HANDLE ProcessHandle;

ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_ProcessIndex[currentS el ect]); //利用数组ID指定的获得存在的一个进程的句柄

if(ProcessHandle) {TerminateProcess(ProcessHandle,0); //使指定进程结束AfxMessageBox("指定进程已终止!");

OnGetProcess();//刷新显示

}

else {AfxMessageBox("系统不允许终止指定进程!");

}

}

}

else {AfxMessageBox("请先选择一个需要终止的进程!",MB_OK);

}

}

功能实现的流程图如图4所示:

图4 终止进程流程图图

3.4 退出模块

该模块使用到的控件情况表如表1:

在I IDCANCEL 控件上建立事件OnBnClickedCancel(),“退出”按钮响应函数,退出进程管理器。函数源代码如下:

void CShowAllProcessDlg::OnBnClickedCancel() //断开该连接"按钮的响应函

{

IDCANCEL // TODO: 在此添加控件通知处理程序代码

OnCancel();

}

四、类的设计与分析

4.1、CShowAllProcessApp 类

以CwinApp 为基类创建CShowAllProcessApp 子类,它是应用程序的入口和出口,在这里处理一些启动和退出程序时需要读取或写入的设置信息,以及设置一些全局变量。CShowAllProcessApp 类的定义如下:

class CShowAllProcessApp : public CwinApp // 函数头文件中的应用程序,

public: CShowAllProcessApp();

//整个程序中的应用程序

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CShowAllProcessApp)

public:

virtual BOOL InitInstance();

//}}AFX_VIRTUAL

// Implementation

//{{AFX_MSG(CShowAllProcessApp)

// NOTE - the ClassWizard will add and remove member functions here.

// DO NOT EDIT what you see in these blocks of generated code !

//}}AFX_MSG

};

//用户程序中的每个CCmdTarget 派生类必须提供消息映射以处理消息,用这个函数了来处理用户消息

DECLARE_MESSAGE_MAP()

4.2 CaboutDlg 类

以CDialog 为基类创建CAboutDlg 类,CAboutDlg 由CDialog 派生而来,用来处理进程管理器的主窗口。CLockfileDlg 类的定义如下:

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX }; //公有类型

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // 数据更新

//}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG DECLARE_MESSAGE_MAP() //

};

4.3、CshowAllProcessDlg 类

以CDialog 为基类创建CShowAllProcessDlg 子类。CLockfileDlg 类的定义如下:

class CShowAllProcessDlg : public CDialog

{

// Construction

public:

DWORD m_ProcessIndex[50];//存放所有进程的ID

CShowAllProcessDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CShowAllProcessDlg)

enum { IDD = IDD_SHOWALLPROCESS_DIALOG };

CListCtrl m_showlist;

CSXButton m_show;

CSXButton m_exit;

CSXButton m_stop;

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CShowAllProcessDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

HICON m_hIcon;

// Generated message map functions

//{{AFX_MSG(CShowAllProcessDlg)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnGetProcess();

afx_msg void OnStopProcess();

afx_msg void OnstartBUTTON();

afx_msg void Ononrun();

//}}AFX_MSG DECLARE_MESSAGE_MAP()

public:

afx_msg void OnBnClickedCancel();

public:

afx_msg void OnLvnItemchangedListShow(NMHDR *pNMHDR, LRESULT

*pResult);

};

4.4、CSXButton 类

以CButton 为基类创建CSXButton 类,CSXButton 由CButton 派生而来,用于创建控制的按钮,用于界面的美化。CSXButton 类的定义如下:class CSXButton :

public CButton

{

// Construction public: CSXButton();

// Attributes

private:

// Positioning BOOL m_bUseOffset;

CPoint m_pointImage;

CPoint m_pointText;

int m_nImageOffsetFromBorder;

int m_nTextOffsetFromImage;

// Image

HICON m_hIcon;

HBITMAP m_hBitmap;

HBITMAP m_hBitmapDisabled;

int m_nImageWidth,

m_nImageHeight;

// Color Tab

char m_bColorTab;

COLORREF m_crColorTab;

// State BOOL m_bDefault;

UINT m_nOldAction;

UINT m_nOldState;

// Operations

public:

// Positioning

int SetImageOffset( int nPixels );

int SetTextOffset( int nPixels );

CPoint SetImagePos( CPoint p );

CPoint SetTextPos( CPoint p );

// Image

BOOL SetIcon( UINT nID, int nWidth, int nHeight );

BOOL SetBitmap( UINT nID, int nWidth, int nHeight );

BOOL SetMaskedBitmap( UINT nID, int nWidth, int nHeight, COLORREF crTransparentMask ); BOOL HasImage();

// Color Tab

void SetColorTab(COLORREF crTab);

// State BOOL SetDefaultButton( BOOL bState = TRUE );

private:

BOOL SetBitmapCommon( UINT nID, int nWidth, int nHeight, COLORREF crTransparentMask, BOOL bUseMask );

void CheckPointForCentering( CPoint &p, int nWidth, int nHeight ); void Redraw();

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CSXButton)

public:

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

//}}AFX_VIRTUAL

// Implementation

public:

virtual ~CSXButton();

// Generated message map functions

protected:

//{{AFX_MSG(CSXButton)

afx_msg LRESULT OnGetText(WPARAM wParam, LPARAM lParam);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

六、功能测试

本进程管理器实现了四个功能,加上调试形成五大界面,以下是程序调试后的各功能界面。

1)进程管理器界面如图5 所示:

图5 进程管理器界面

2)获取进程界面如图6 所示:

图6 获取进程界面

3)启动新进程界面如图7 所示:

图7 启动新进程界面4)终止进程界面如图8 所示:

图8 终止进程界面5)退出进程界面如图9 所示:

图9 退出进程界面

七、存在的不足与对策

经过三个星期的课程设计,终于编成了一个进程管理器,我从一个从未接触过MFC 的新手到现在对 MFC 有了一定程度的了解,在此期间,我上网查阅了相关的资料,看网上视频教程和查阅图书馆的相关书籍,并在一些同学的帮助下,终于完成了这份粗糙的作品。通过这次课程设计中,我学到了很多关于MFC 的只是,同时也对VC++有了更深的认识,并对编程有了新的看法。当然,在此过程中我也遇到了很多问题,有的问题经过研究科最终被解决了,有的问题却仍然存在,以下是我做这个实验遇到的问题,以及一些解决的方法:

第一、通过本次试验,在“启动新进程”的实现函数里调用了MultiByteToWideChar,表示把多字节字符转为宽字节字符,它跟WideCharToMultiByte()函数(宽字节字符转为多字节字符)极容易混淆,实际上MultiByteToWideChar 和WideCharToMultiByte 是互逆的过程,MultiByteToWideChar 是将普通字符串转化为Unicod,而WideCharToMultiByte 正好相反。它们的操作过程相类似,在使用时首先要申请数组空间,然后分配响应的数组空间,接着是进行字符间的转换了,最后还要释放所占用的内存。这两个函数的缺点在于无法动态分 21 配内存,在转换很长的字符串时可能会浪费较多内存空间,优点是在不考虑浪费空间的情况下转换较短字符串非常方便。

第二、在窗体界面美化方面。窗体的美化方法有很多,可以在PushButton 控件中美化,可以在GroupButton 控件中美化,可以在Edit 控件中美化,在Static 控件中美化等等,本系统是在 PushButton 控件中美化的,自定义一个基于 Cbutton 的子类 CSXButton,在 CSXButton 函数里对整个BUTTON 控件进行绘制。此次课程设计由于时间和技术的问题,有很多地方还做得不够好,存在很多不足,有很地方还需要改进,在程序的设计方面。因为对MFC 和VC++编程不太熟悉,在做设计的过程中遇到了很多问题,耗费了很多时间在代码的修改和调试上,还有很多界面的设置不能如愿实现,今后应在程序的编写上下苦功,不断加强自己的编程的能力。

八、程序源代码

// ShowAllProcessDlg.cpp : implementation file

//

#include "stdafx.h"

#include "ShowAllProcess.h"

#include "ShowAllProcessDlg.h"

#include "TLHELP32.H"//一定要加如这个头文件

#ifdef _DEBUG #define new DEBUG_NEW

#undef THIS_FILE static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About class CAboutDlg :

public

CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DA TA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DA TA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DA TA_INIT(CAboutDlg)

//}}AFX_DA TA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DA TA_MAP(CAboutDlg)

//}}AFX_DA TA_MAP }

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP() /////////////////////////////////////////////////////////////////////////////

// CShowAllProcessDlg dialog

CShowAllProcessDlg::CShowAllProcessDlg(CWnd* pParent /*=NULL*/)

: CDialog(CShowAllProcessDlg::IDD, pParent) {

//{{AFX_DA TA_INIT(CShowAllProcessDlg)

// NOTE: the ClassWizard will add member initialization here /

/}}AFX_DA TA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_START);

}

void CShowAllProcessDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DA TA_MAP(CShowAllProcessDlg)

DDX_Control(pDX, IDC_LIST_SHOW, m_showlist);

DDX_Control(pDX, IDOK, m_show);

DDX_Control(pDX, IDOK, m_show);

DDX_Control(pDX, IDCANCEL, m_exit);

DDX_Control(pDX, IDC_STOP, m_stop); 24 //}}AFX_DA TA_MAP

} BEGIN_MESSAGE_MAP(CShowAllProcessDlg, CDialog) /

/{{AFX_MSG_MAP(CShowAllProcessDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDOK, OnGetProcess)

ON_BN_CLICKED(IDC_STOP, OnStopProcess)

// ON_BN_CLICKED(IDC_startBUTTON, OnstartBUTTON)

ON_BN_CLICKED(IDC_onrun, Ononrun)

//}}AFX_MSG_MAP

END_MESSAGE_MAP() /////////////////////////////////////////////////////////////////////////////

// CShowAllProcessDlg message handlers BOOL

CShowAllProcessDlg::OnInitDialog()

{

CDialog::OnInitDialog();

m_stop.SetIcon(IDI_ICON_STOP,25,25);

m_exit.SetIcon(IDI_ICON_EXIT,25,25);

m_show.SetIcon(IDI_ICON_SHOW,25,25);

m_showlist.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

实验2 进程状态转换及其PCB的变化

实验2进程状态转换及其PCB的变化 1.目的 自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。 2. 内容及要求 1)设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。 2)独立编写、调试程序。进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择。 3)合理设计与进程PCB相对应的数据结构。PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。 4)设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB 内容、组织结构的变化。 5)代码书写要规范,要适当地加入注释。 6)鼓励在实验中加入新的观点或想法,并加以实现。 7)认真进行预习,完成预习报告。 8)实验完成后,要认真总结,完成实验报告。 3.程序流程图 进程的三种基本状态及其转换如下图所示。

开始 输入要执行的指令 1?N 2?N 3?N 4? N 5?N 0?Y Y 结束 N 提示输入错误 就绪队列已 满? N 创建进程 Y 提示就绪队列 已满Y 有进程处于运行状态? Y 该进程执行一个时间片 后放回就绪队列 N 将就绪队列中优先级最高的进程放入运行队列 有进程处于运行状态? Y 该进程所需执行时间减1,并回到就绪队列 Cputime++ Y 有进程处于运行状态? Y 将该进程放入阻塞 队列 N 提示无运行的进程 输入事件发生的进程名称 阻塞队列中有该 进程? Y 将该进程放入就绪队列 N 提示该进程并 未阻塞 4.数据结构及说明 在本实验中,主要的数据结构是PCB 的数据结构,具体如下: struct process{

进程调度算法模拟 (操作系统课程设计报告)

福建农林大学计算机与信息学院 课程设计报告 课程名称:操作系统 实习题目:进程调度算法模拟 姓名: 系:计算机科学与技术系 专业:计算机科学与技术 年级:2012 学号: 指导教师: 职称:副教授 年月日

福建农林大学计算机与信息学院计算机类 课程设计结果评定

目录 1.本选题课程设计的目的 (4) 2.本选题课程设计的要求 (4) 3.本选题课程设计报告内容 (4) 3.1前言 (4) 3.2进程调度算法模拟的环境 (4) 3.3系统技术分析 (4) 3.4系统流程图及各模块 (5) 3.5程序调试情况 (8) 4.总结 (11) 参考文献 (11) 程序代码 (12)

1.设计目的 课程设计将课本上的理论知识和实际有机的结合起来,锻炼学生的分析系统,解决实际问题的能力。提高学生分析系统、实践编程的能力。 2.设计要求 利用学到的操作系统和编程知识,完成具有一定难度的系统分析研究或系统设计题目。其中:专题系统理论研究应包括研究目的、目标,论点和论据以及证明推导等;分析、设计系统应包括编写、调试程序以及最后写出设计报告或系统说明文档文件,系统说明文档包括系统界面、变量说明、系统功能说明、编程算法或思路、流程图和完整程序。具体要求如下: 1、对系统进行功能模块分析、控制模块分析正确; 2、系统设计要实用; 3、编程简练,可用,功能全面; 4、说明书、流程图要清楚。 3.设计方案 3.1前言 本程序包括三种算法,用C或C++语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。 3.2本选题设计的环境 WindowsXP下的Microsoft Visual C++ 6.0 3.3系统技术分析 (1)编程实现对N个进程采用某种进程调度算法(如动态优先权调度算法、先来先服务算法、短进程优先算法、时间片轮转调度算法)调度执行的模拟。(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:进程标识数ID。 进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。

32款图片处理软件介绍

32款图片处理软件介绍(转) 色友们大概没有人不知道Photoshop大名的,要想得到好的照片后期处理是必不可少的。但是Photoshop也不是万能的,况且它的资源占用也非常的大,那么有没有其他的选择呢,答案是肯定的。下面我们就来向大家介绍32款小编常用的图像处理软件。 1.名称:ExifShow 查看数码照片EXIF信息 大小:303K 软件介绍:对DC发烧友来说,在查看一幅精美的数码照片时,肯定希望了解作者所使用的相机、曝光值、焦距值等参数,一般的做法是将这些数码照片下载回来,然后利用ACDSee 等软件查看EXIF信息,由于下载或保存的过程必不可少,因此操作稍稍麻烦了一些。安装了ExifShow插件,以后当我们在IE中浏览数码照片时,只要按一下鼠标右键,快捷菜单中就会出现“查看EXIF信息”的选项,马上就可以查看。在信息列表处单击鼠标右键,可以将选中的EXIF信息复制到剪贴板中或者另存为文本文件。假如有一些数码照片显示“该图片没有EXIF信息”,说明可能是经过了某种形式的处理而导致丢失了EXIF数据,或者是用不支持EXIF的数码相机拍摄的照片。 橡树下载:https://www.360docs.net/doc/5417429820.html,/download/software/1.rar 2.软件名称:ACDsee 7 简体中文化版 大小:24M 软件介绍:ACDSee 是目前最流行的数字图象处理软件,它能广泛应用于图片的获取、管理、浏览、优化甚至和他人的分享!使用ACDSee,你可以从数码相机和扫描仪高效获取图片,并进行便捷的查找、组织和预览。超过50 种常用多媒体格式被一网打尽!作为最重量级看图软件,它能快速、高质量显示您的图片,再配以内置的音频播放器,我们就可以享用它播放出来的精彩幻灯片了。Acdsee 还能处理如Mpeg 之类常用的视频文件。此外ACDSee 是您最得心应手的图片编辑工具,轻松处理数码影像,拥有的功能像去除红眼、剪切图像、锐化、浮雕特效、曝光调整、旋转、镜像等等,还能进行批量处理哦! 橡树下载:https://www.360docs.net/doc/5417429820.html,/download/software/33.ra 3名称:True Photo 4.1 中文正式版

操作系统课程设计报告进程调度

前言 操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口等。实际上,用户是不用接触操作系统的,操作系统管理着计算机硬件资源,同时按照应用程序的资源请求,分配资源,如:划分CPU时间,内存空间的开辟,调用打印机等。 操作系统的主要功能是资源管理,程序控制和人机交互等。计算机系统的资源可分为设备资源和信息资源两大类。设备资源指的是组成计算机的硬件设备,如中央处理器,主存储器,磁盘存储器,打印机,磁带存储器,显示器,键盘输入设备和鼠标等。信息资源指的是存放于计算机内的各种数据,如系统软件和应用软件等。 操作系统位于底层硬件与用户之间,是两者沟通的桥梁。用户可以通过操作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。 本次课程设计我们将对上学期所学的知识进行系统的应用,而达到巩固知识的作用

目录 1问题概述 (2) 2需求分析 (2) 3 概要设计 (2) 3.1主要功能 (2) 3.2 模块功能结构 (3) 3.3 软硬件环境 (3) 3.4数据结构设计 (3) 4 详细设计 (4) 4.1“先来先服务(FCFS)调度算法” (4) 4.2“短进程调度算法(SPF)” (7) 4.3“高响应比优先调度算法” (10) 4.4“优先级调度(非抢占式)算法” (14) 5 系统测试及调试 (16) 5.1测试 (16) 5.2调试过程中遇到的问题 (17) 6 心得体会 (18) 7 参考文献 (19) 8 附录 (20)

操作系统实验报告+进程状态转换

实验进程状态转换及其PCB的变化 一、程序流程图: 二、使用的数据结构及说明: 在本实验中,主要用到的数据结构是PCB的结构,其中PCB的数据结构如下: struct PCB { int P_Id; //PCB的ID号 char P_Name[10]; //PCB的名称 char P_State[10]; //PCB状态 int P_Runtime; //PCB的所需要的运行时间 int P_Requiry; //PCB所需要的资源要求 struct PCB * next ; //PCB块的下一个指针 } ; 其中,P_Id,和P_Name用来标示一个进程,而P_State用来标示进程的五种状态:

Create_state,Ready_state,Block_state,Run_state,Exit_state。P_Runtime标示要完成一个进程所需要的时间。P_Requiry标示一个进程的执行所需要的其他条件,当其他的条件满足,则P_Requiry 置1,否则置0。Struct PCB * next 用来指向同一队列中的下一个PCB块。 三、程序源代码: #include"stdlib.h" #include"stdio.h" #include"string.h" /********** globle structure and viable ******/ struct PCB { int P_Id; //PCB的ID号 char P_Name[10]; //PCB的名称 char P_State[10]; //PCB状态 int P_Runtime; //PCB的所需要的运行时间 int P_Requiry; //PCB所需要的资源要求 struct PCB * next ; //PCB块的下一个指针 } ; struct PCB * Create_state; //创建状态 struct PCB * Run_state; //运行状态 struct PCB * Ready_state; //就绪状态 struct PCB * Block_state; //阻塞状态 struct PCB * Exit_state; //退出状态 int signal4=0; //标示进程4的完成状态 int signal5=0; //标示进程5的完成状态 void InsertQueue(struct PCB **head,struct PCB *node) /* insert node function */ { struct PCB * p,*q; node->next=NULL; if(*head==NULL) //如果队列为空 { *head=node; } Else //队列不空 { p=*head; q=p->next; while(q!=NULL) //找到最后的元素位置 { p=q; q=q->next; } p->next=node; //将节点插入队列 }

计算机操作系统综合设计实验报告实验一

计算机操作系统综合设计 实验一 实验名称:进程创建模拟实现 实验类型:验证型 实验环境: win7 vc++6.0 指导老师: 专业班级: 姓名: 学号: 联系电话: 实验地点:东六E507 实验日期:2017 年 10 月 10 日 实验报告日期:2017 年 10 月 10 日 实验成绩:

一、实验目的 1)理解进程创建相关理论; 2)掌握进程创建方法; 3)掌握进程相关数据结构。 二、实验内容 windows 7 Visual C++ 6.0 三、实验步骤 1、实验内容 1)输入给定代码; 2)进行功能测试并得出正确结果。 2、实验步骤 1)输入代码 A、打开 Visual C++ 6.0 ; B、新建 c++ 文件,创建basic.h 头文件,并且创建 main.cpp 2)进行功能测试并得出正确结果 A 、编译、运行main.cpp B、输入测试数据 创建10个进程;创建进程树中4层以上的数型结构 结构如图所示:。

createpc 创建进程命令。 参数: 1 pid(进程id)、 2 ppid(父进程id)、3 prio(优先级)。 示例:createpc(2,1,2) 。创建一个进程,其进程号为2,父进程号为1,优先级为2 3)输入创建进程代码及运行截图 4)显示创建的进程

3、画出createpc函数程序流程图 分析createpc函数的代码,画出如下流程图:

四、实验总结 1、实验思考 (1)进程创建的核心内容是什么? 答: 1)申请空白PCB 2)为新进程分配资源 3)初始化进程控制块 4)将新进程插入到就绪队列 (2)该设计和实际的操作系统进程创建相比,缺少了哪些步骤? 答:只是模拟的创建,并没有分配资源 2、个人总结 通过这次课程设计,加深了对操作系统的认识,了解了操作系统中进程创建的过程,对进程创建有了深入的了解,并能够用高 级语言进行模拟演示。一分耕耘,一分收获,这次的课程设计让 我受益匪浅。虽然自己所做的很少也不够完善,但毕竟也是努 力的结果。另外,使我体会最深的是:任何一门知识的掌握, 仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能 达到功效。

2011180021-Linux操作系统-课程设计报告-基于Linux的进程调度模拟程序

河南中医学院 《linux操作系统》课程设计报告 题目:基于Linux的进程调度模拟程序 所在院系:信息技术学院 专业年级:2011级计算机科学与技术完成学生:2011180021 郭姗 指导教师:阮晓龙 完成日期:201X 年06 月22 日 目录 1. 课程设计题目概述3 2. 研究内容与目的4 3. 研究方法5 4. 研究报告6 5. 测试报告/实验报告7 6. 课题研究结论8 7. 总结9

1、课程设计题目概述 随着Linux系统的逐渐推广,它被越来越多的计算机用户所了解和应用. Linux是一个多任务的操作系统,也就是说,在同一个时间内,可以有多个进程同时执行。如果读者对计算机硬件体系有一定了解的话,会知道我们大家常用的单CPU计算机实际上在一个时间片断内只能执行一条指令,那么Linux是如何实现多进程同时执行的呢?原来Linux使用了一种称为"进程调度(process scheduling)"的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多进程中挑选一个投入运行,其他的进程暂时等待,当正在运行的那个进程时间耗尽,或执行完毕退出,或因某种原因暂停,Linux就会重新进行调度,挑选下一个进程投入运行。因为每个进程占用的时间片都很短,在我们使用者的角度来看,就好像多个进程同时运行一样了。本文就是对进程调度进行研究、实验的。 本文首先对Linux系统进行了简要的介绍, 然后介绍了进程管理的相关理论知识。其次,又介绍最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)、先来先服务算法的相关知识,并对进程调度进行最高优先数优先的调度算法和先来先服务算法模拟实验,并对比分析两种算法的优缺点,从而加深对进程概念和进程调度过程/算法的理解 设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择某一进程占用处理机。使得系统中的进程能够有条不紊的运行,同时提高处理机的利用率以及系统的性能。所以设计模拟进程调度算法(最高优先数优先的调度算法、先来先服务算法),以巩固和加深处理进程的概念,并且分析这两种算法的优缺点。关键词:linux 进程调度调度算法

实验一 进程状态转换

实验一进程的状态及其转换 一、实验目的: 自行编制模拟程序,通过形象化的状态显示,加深理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。 二、实验内容及要求: 1)设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。 2)独立编写、调试程序。进程的数目、进程的状态模型(三状态、五状态、七状 态或其它)以及PCB的组织形式可自行选择。 3)合理设计与进程PCB相对应的数据结构。PCB的内容要涵盖进程的基本信息、控 制信息、资源需求及现场信息。 4)设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB内容、 组织结构的变化。 三、程序流程图:

四、使用的数据结构及说明: 在本实验中,主要用到的数据结构是PCB的结构,其中PCB的数据结构如下: struct PCB { int P_Id; //PCB的ID号 char P_Name[10]; //PCB的名称 char P_State[10]; //PCB状态 int P_Runtime; //PCB的所需要的运行时间 int P_Requiry; //PCB所需要的资源要求 struct PCB * next ; //PCB块的下一个指针 } ; 其中,P_Id,和P_Name用来标示一个进程,而P_State用来标示进程的五种状态:Create_state,Ready_state,Block_state,Run_state,Exit_state。P_Runtime标示要完成一个进程所需要的时间。P_Requiry标示一个进程的执行所需要的其他条件,当其他的条件满足,则P_Requiry置1,否则置0。Struct PCB * next 用来指向同一队列中的下一个PCB 块。 五、参考程序源代码: #include"stdlib.h" #include"stdio.h" #include"string.h" #include /*全局结构体及变量定义*/ struct PCB { int P_Id; //PCB的ID号 char P_Name[10]; //PCB的名称 char P_State[10]; //PCB状态 int P_Runtime; //PCB的所需要的运行时间 int P_Requiry; //PCB所需要的资源要求 struct PCB * next ; //PCB块的下一个指针 } ; struct PCB * Create_state; //创建状态 struct PCB * Run_state; //运行状态 struct PCB * Ready_state; //就绪状态 struct PCB * Block_state; //阻塞状态 struct PCB * Exit_state; //退出状态 int signal4=0; //标示进程4的完成状态 int signal5=0; //标示进程5的完成状态 void InsertQueue(struct PCB **head,struct PCB *node) //将进程插入到队列的尾部

操作系统课程设计报告进程调度

前言操作系统(OperatingSystem,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口等。实际上,用户是不用接触操作系统的,操作系统管理着计算机硬件资源,同时按照应用程序的资源请求,分配资源,如:划分CPU时间,内存空间的开辟,调用打印机等。 操作系统的主要功能是资源管理,程序控制和人机交互等。计算机系统的资源可分为设备资源和信息资源两大类。设备资源指的是组成计算机的硬件设备,如中央处理器,主存储器,磁盘存储器,打印机,磁带存储器,显示器,键盘输入设备和鼠标等。信息资源指的是存放于计算机内的各种数据,如系统软件和应用软件等。 操作系统位于底层硬件与用户之间,是两者沟通的桥梁。用户可以通过操作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。

本次课程设计我们将对上学期所学的知识进行系统的应用,而达到巩固知识的作用

目录 1问题概述.................................................................................................... 2需求分析.................................................................................................... 3概要设计.................................................................................................... 3.1主要功能................................................................................................. 3.2模块功能结构 ........................................................................................ 3.3软硬件环境............................................................................................. 3.4数据结构设计 ........................................................................................ 4详细设计.................................................................................................... 4.1“先来先服务(FCFS)调度算法” ....................................................... 4.2“短进程调度算法(SPF)”.................................................................. 4.3“高响应比优先调度算法”................................................................. 4.4“优先级调度(非抢占式)算法”.......................................................... 5系统测试及调试 ....................................................................................... 5.1测试......................................................................................................... 5.2调试过程中遇到的问题 ........................................................................ 6心得体会.................................................................................................... 7参考文献.................................................................................................... 8附录............................................................................................................

Office剪辑管理器和图片管理器

Office剪辑管理器和图片管理器 Office里平日看起来不起眼的剪辑管理器和图片管理器是好东西。市场部的周经理需要处理一批用于商务演示的照片,它们就派上用场了。 一大座剪辑宝库 在做商务演示的时候,周经理经常要向PowerPoint演示文稿添加一些小图片,使得幻灯片更加活泼。他想到了Office剪辑管理器。在PowerPoint中点击“插入→剪贴画”,就会启动剪辑管理器。在“搜索文字”栏输入图片的主题,如“美元符号”,指定搜索范围和结果类型,很快就显示出了许多结果,包括众多Office网上剪辑的内容。周经理选择中意的一张,点击“插入”即可(如图1)。 图1 周经理的电脑中存有一批公司产品的图片,可以方便地导入剪辑库中:点击“文件→将剪辑添加到管理器→在我自己的目录”,就可以完成添加,这里还可以指定图片的关键字,比如产品的型号,方便以后在Office组件中搜索、调用。 精雕细琢演示图片 将产品的照片插入到PowerPoint之后,周经理需要根据幻灯片的背景颜色对图片作出相应的处理,使颜色更加协调。选中这张图片,点击“图片工具→格式→重新着色”,在这里PowerPoint提供了很多内置的着色方案,可以轻松改

变图片的配色(如图2)。除此之外,PowerPoint可以调整图片的亮度、对比度等属性,还可以为添加图片边框、调整图片效果、形状等,如图3。 图2 图3 批量图片剪刀手 一次产品演示,需要用到很多的产品图片,PowerPoint虽然可以很好地完成处理单张图片,但是批量调整则有些力不从心。于是,周经理请Office图片管理器出场。 首先,将照片导入程序:点击“文件→添加图片快捷方式”,查找到照片保存的位置,点击“添加”。接下来单击右侧导航栏的“编辑图片”按钮,在任务窗格中将需要编辑的照片全部选中,之后就可以像在PowerPoint中那样对图片进行各种处理(如图4)。调整完成后,可以点击“保存”或“全部保存”应用对图片的更改。

进程调度算法实验报告

操作系统实验报告(二) 实验题目:进程调度算法 实验环境:C++ 实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较 各种算法的性能优劣。 实验内容:编程实现如下算法: 1.先来先服务算法; 2.短进程优先算法; 3.时间片轮转调度算法。 设计分析: 程序流程图: 1.先来先服务算法 开始 初始化PCB,输入进程信息 各进程按先来先到的顺序进入就绪队列 结束 就绪队列? 运行 运行进程所需CPU时间 取消该进程 2.短进程优先算法

3.时间片轮转调度算法 实验代码: 1.先来先服务算法 #include #define n 20 typedef struct { int id; //进程名

int atime; //进程到达时间 int runtime; //进程运行时间 }fcs; void main() { int amount,i,j,diao,huan; fcs f[n]; cout<<"请输入进程个数:"<>amount; for(i=0;i>f[i].id; cin>>f[i].atime; cin>>f[i].runtime; } for(i=0;if[j+1].atime) {diao=f[j].atime; f[j].atime=f[j+1].atime; f[j+1].atime=diao; huan=f[j].id; f[j].id=f[j+1].id; f[j+1].id=huan; } } } for(i=0;i #define n 5 #define num 5 #define max 65535 typedef struct pro { int PRO_ID; int arrive_time;

操作系统实验一模拟进程状态转换

实验一模拟进程状态转换及其PCB的变化 一、实验目的: 自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。 二、实验内容及要求: (1)、设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。 (2)、独立编写、调试程序。进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择。(3)、合理设计与进程PCB相对应的数据结构。PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。 (4)、设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB内容、组织结构的变化。 (5)、代码书写要规范,要适当地加入注释。 (6)、鼓励在实验中加入新的观点或想法,并加以实现。 (7)、认真进行预习,完成预习报告。 (8)、实验完成后,要认真总结,完成实验报告。 三、实现: 数据结构 struct PCB{

char name; int priority; int needtime; bool operator < (const PCB &b) const{ return priority>b.priority; } }; 五状态进程模型 最高优先数优先调度算法流程图

四、运行结果:

图1创建2个进程,因为这时cpu空闲所以内核调度,b优先级高先执行 图2超时,因为这时cpu空闲所以内核调度,b优先级还是比a高所以先执行

图32个进程均被阻塞,其中一旦进程被阻塞就会引发调度 图4唤醒1个进程,从阻塞队列取队首放到就绪队列队尾,由于这时cpu空闲所以内核调 度

进程模拟调度算法课程设计

一.课程概述 1.1.设计构想 程序能够完成以下操作:创建进程:先输入进程的数目,再一次输入每个进程的进程名、运行总时间和优先级,先到达的先输入;进程调度:进程创建完成后就选择进程调度算法,并单步执行,每次执行的结果都从屏幕上输出来。 1.2.需求分析 在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。本次实验在VC++6.0环境下实现先来先服务调度算法,短作业优先调度算法,高优先权调度算法,时间片轮转调度算法和多级反馈队列调度算法。 1.3.理论依据 为了描述和管制进程的运行,系统为每个进程定义了一个数据结构——进程控制块PCB(Process Control Block),PCB中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息,系统总是通过PCB对进程进行控制,亦即,系统是根据进程的PCB 而不是任何别的什么而感知进程的存在的,PCB是进程存在的惟一标志。本次课程设计用结构体Process代替PCB的功能。 1.4.课程任务 一、用C语言(或C++)编程实现操作模拟操作系统进程调度子系统的基本功能;运用多 种算法实现对进程的模拟调度。 二、通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转、短作业优先、多 级反馈队列调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。 三、实现用户界面的开发

2011221728-黄凯-基于Android的图片管理器设计与实现

摘要 随着智能手机走进普通人的生活,它将成为人们获取信息的主要设备。因此,手机的应用服务将会有很大的发展空间,手机图片管理服务就是其中的一项。Android平台支持各种应用的开发,它是目前最流行的开源智能手机操作系统,最新的版本是android4.2,提供了便捷灵活的开发接口。 本课题在Android SDK2.2平台下,设计了一个手机图片管理。采用了Android 平台的Framework层提供的接口,实现了图片预览、图片动态切换、停止播放等功能,支持jpg,bmp,png和gif图片格式,该程序是独立的apk文件,可以安装在android2.2以上的系统内。它可以让手机成为一个图片管理,用户可以将其放在心仪的地方,来展示美好的图片,而不必再去购买别的设备就能拥有精美的图片管理了。 本文开头首先对图片管理软件的研究背景做了简单介绍,其次简述了现今流行的几个手机开发平台,详细介绍了Android开发平台的架构,并描述了Android 开发环境的搭建过程;接下来是对系统设计的介绍,本文从对购书比价系统的分析,到数据库的设计,再到系统客户端的实现都做了详细的解说,并把有些细节和技术提出来做单一的解说;紧接着本文描述了此客户端的图片管理软件的测试过程和如何发布此系统。。本设计完成后,能够实现以下功能:图片的浏览、图片属性的修改、图片的一些基本操作。 关键词:Android ;java;图片管理; I

第1章绪论 1.1 系统开发背景 如今手机就像钥匙一样,是我们出门必带的物品之一。随着科技的迅猛发展,现在的手机都是智能手机,它的功能不仅仅只是用来打电话或是收发短信,我们还可以用它听歌看视频、用蓝牙传输数据、玩游戏、上网等等。据数据资料显示,截至2013年1月我国有8亿手机用户,使用手机上网的用户超过了6亿。基于android平台手机的发展趋势,本设计以android平台手机为核心制作了一个图片浏览器。 本次设计运用android平台手机作为研究开发对象,配合Java语言程序设计以及面向对象思想设计了一种手机图片浏览器。本设计完成后,能够实现以下功能:图片的浏览、图片属性的修改、图片的一些基本操作,一些远程模块的调用、根据不同图片扩展名来实现图片只能的打开,同时给以后的一些实用软件留下了借口、可以实现与手机之间的通讯。以及电脑之间的共享。 在设计时,按照设计的要求,从可靠性、经济性、安全性三个方面进行考虑,通过设计方案的比较,确定出来一套即经济又可行的方案。 本次设计是对所学知识的综合运用,把理论知识和实践相结合。在本次设计与检验过程中遇到了许多实际问题,比如android平台手机及其运行环境的选择,不熟悉myeclipse和eclipse软件的使用方法,不熟悉开发技巧,可能会发生一些微小功能不能实现、软件运行不稳定,如何设计软件的最佳外观效果等。所有的这些问题,我们都通过查阅资料,咨询老师一一解决了,为设计的成功提供了保障。 本文通过方案确认,介绍了设计中所用到的技术、开发思想,以及android 2

实验一处理器调度实验报告

处理器调度一、实验内容 选择一个调度算法,实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。 当就绪状态进程 个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下处理器调度,帮助学生加深了解处理器调度的工作。 三、实验题目 设计一个按优先数调度算法实现处理器调度的程序 提示: (1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进 程控制块的格 式为: 其中,进程名----作为进程的标识,假设五个进程的进程名分别是R, P2, P3, P4,R。 指针—按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块

首地址,最后一个进程中的指针为“ 0”。 要求运行时间-- 假设进程需要运行的单位时间数。 优先数-赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态-可假设有两种状态,“就绪”状态和“结束“状态,五个进程的初 始状态都为 “就绪“状态,用“ R”表示,当一个进程运行结束后,它的状态变为“结束”, 用“ E”表示。 (2)在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数” 和“要求运行时间”。 (3)为了调度方便,把五个进程按给定的优先数从大到小连成队列,用一单元指出队首 进程,用指针指出队列的连接情况。例: 队首标志 (4)处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优 先数就减“ 1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的 启动运行,而是执行: 优先数- 1 要求运行时间-1 来模拟进程的一次运行提醒注意的是:在实际的系统中,当一个进程被选中运

操作系统-课程设计

课程设计说明书(操作系统) 题目:进程调度 院系:计算机科学与工程学院 专业班级:信息安全13-2 学号:20133029xx 学生姓名:xx 指导教师:xx 2015年12月15日

安徽理工大学课程设计(论文)任务书计算机科学与工程学院

安徽理工大学课程设计(论文)成绩评定表

摘要 现代计算机系统中,进程是资源分配和独立运行的基本单位,是操作系统的核心概念。因而,进程就成为理解操作系统如何实现系统管理的最基本,也是最重要的概念。进程调度是进程管理过程的主要组成部分,是必然要发生的事件。 在现代操作系统中,进程的并发机制在绝大多数时候,会产生不断变化的进程就绪队列和阻塞队列。处于执行态的进程无论是正常或非正常终止、或转换为阻塞状态,都会引发从就绪队列中,由进程调度选择一个进程进占CPU。 进程调度的核心是进程调度的算法.在本课程设计中,用良好清晰的界面向用户展示了进程调度中的时间片轮转调度算法。在最终实现的成果中,用户可指定需要模拟的进程数,CPU时间片和进程的最大执行时间,并且选择需要演示的算法,界面将会动态的显示进程调度过程及各个队列的变化。通过此进程调度模拟系统,用户可以对时间片轮转调度算法有进一步以及直观的了解。 关键词:进程,调度,PCB,时间片轮转

目录 1.设计目的 (6) 2.设计思路 (6) 3.设计过程 (8) 3.1流程图 (8) 3.2算法 (8) 3.3数据结构 (10) 3.4源代码 (10) 4.实验结果及分析 (20) 4.1 使用说明 (20) 4.2程序演示 (20) 5.实验总结 (24) 6.参考文献 (24)

图片管理器课程设计

学号 天津城建大学 可视化编程 课程报告 学生姓名 班级 成绩 计算机与信息工程学院

目录 第1章设计任务与目标 0 第2章设计方案 (1) 2.1管理器结构设计 (1) 第3章设计实现 (2) 3.1程序主窗体设计 (2) 3.1.1主窗体代码 (2) 3.2程序目录设计 (12) 3.2.1目录代码 (12) 3.3导入图片窗体设计 (14) 3.3.1导入图片窗体代码 (14) 3.4所需的类代码 (18) 第4章设计结果与分析 (24) 4.1设计分析计 (24) 4.2设计结构 (24) 第5章总结心得 (25)

第1章设计任务及目标 1.1 设计任务及目标 1、设计图片管理器,对图片实现分目录管理,用户可以自行创建并删除存放图片的目录,并且可以方便将各种图片存放于相应的目录中。 2、可以对目录下的图片以缩略图的形式进行浏览,方便用户进行查找图片,并且在浏览过程中删除一张或者多种图片。 3、可以以实际大小或者适合窗体的大小对单张图片浏览并切换到同目录中的上一张或者下一张图片进行浏览。也可以对同目录中的图片以自动播放形式进行浏览,还可以调整播放时间间隔。

第2章设计方案 2.1 管理器结构设计 通过对结构的分析,以及考虑到要满足的功能,将管理器分为如下几个模块。 1.主窗体:用来实现对图片的浏览,删除,导入,保存等功能。 2.目录窗体:用来创建图片的管理目录,整理图片。 3.导入图片:用来将图片导入目录中,整理到相应文件夹。

第3章设计实现 3.1程序的主窗体 1、设计程序的主窗体用来浏览和查看图片并且对图片进行管理。通过规划,首先设计窗体页面,然后添加相应的控件。如下: 3.1.1主窗体代码编写: using System; using System.Collections.Generic; using https://www.360docs.net/doc/5417429820.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Collections; namespace 图片管理器3 { public partial class MainForm : Form { public MainForm() { InitializeComponent();

物联网传输综合课程设计实验报告 人体红外数据通信实验

物联网传输综合课程设计实验报告 人体红外数据通信实验 一、实验目的 1. 了解基于Z-Stack 协议栈的SappWsn 应用程序框架的工作机制 2. 掌握在ZigBee 协议栈中添加人体红外传感器驱动的方法。 二、实验设备 1. 装有IAR 开发工具的PC 机一台 2. 下载器一个 3. 物联网多网技术开发设计平台一套 三、实验原理 在Z-Stack APP中的HAL\Target\CC2530EB\Includes组中,提供了一个hal_io.h的文件,如图所示。 其中,提供了名为HalIOSetInput 的函数,可以将燃气传感器端口(P1.0)设置为输入,然后通过调用HalIOGetLevel 函数来获取传感器状态。 四、实验步骤 1、将单片机zigbee协调器拆卸下来,取出烧写器。通过Mini USB接口将zigbee 协调器与下载器和PC机相连。

2、将实验箱控制方式切换开关拨至“手动”一侧,转动实验箱“旋钮节点选择”旋钮,使得协调器旁边的LED灯被点亮 3、打开配套代码中的ZStack-CC2530\Projects\SappWsn\SappWsn.eww工程文件,在“Tools”组中,找到“f8wConfig.cfg”文件,双击打开,并找到大概第59 行的“-DZAPP_CONFIG_PAN_ID=0xFFFF”,将其中的“0xFFFF”修改为其他值,例如0x0010

4、在工程目录结构树上方的下拉列表中,选择“CoordinatorEB”,点击工具栏中的“Make”按钮,编译工程,等待工程编译完成,如看到警告,可以忽略。在工程目录结构树中的工程名称上点击鼠标右键,选择“Options”,并在弹出的对话框中选择左侧的“Debugger”,并在右侧的“Driver”列表中选择“Texas Instruments”,点击“Download and Debug”按钮。待程序下载完毕后,点击“Go”按钮,使程序开始运行。点击工具栏中的“Stop Debugging”,退出调试模式, 5、转动实验箱“旋钮节点选择”旋钮,使得热释红外传感器节点旁边的LED灯被点亮,在工程目录结构树上方的下拉列表中,选择“EndDeviceEB”,在“SAPP_Device.h”文件中,取消“HAS_IRPERS”的注释,并保证其他的功能均被注释,如图所示

相关文档
最新文档