導航:首頁 > 源碼編譯 > 核心抽象模型源碼

核心抽象模型源碼

發布時間:2022-03-08 03:24:33

① 為什麼說OS實現了對計算機資源的抽象

OS首先在裸機上覆蓋一層I/O設備管理軟體,實現了對計算機硬體操作的第一層次抽 象;在第一層軟體上再覆蓋文件管理軟體,實現了對硬體資源操作的第二層次抽象。OS 通過在計算機硬體上安裝多層系統軟體,增強了系統功能,隱藏了對硬體操作的細節,由它們共同實現了對計算機資源的抽象。

② 存儲管理的抽象模型

虛擬地址到物理地址映射的抽象模型
在討論Linux是如何具體實現對虛擬內存的支持前,有必要看一下更簡單的抽象模型。
在處理器執行程序時需要將其從內存中讀出再進行指令解碼。在指令解碼之前它必須向內存中某個位置取出或者存入某個值。然後執行此指令並指向程序中下一條指令。在此過程中處理器必須頻繁訪問內存,要麼取指取數,要麼存儲數據。
虛擬內存系統中的所有地址都是虛擬地址而不是物理地址。通過操作系統所維護的一系列表格由處理器實現由虛擬地址到物理地址的轉換。
為了使轉換更加簡單,虛擬內存與物理內存都以頁面來組織。不同系統中頁面的大小可以相同,也可以不同,這樣將帶來管理的不便。Alpha AXP處理器上運行的Linux頁面大小為8KB,而Intel X86系統上使用4KB頁面。每個頁面通過一個叫頁面框號的數字來標示(PFN) 。
頁面模式下的虛擬地址由兩部分構成:頁面框號和頁面內偏移值。如果頁面大小為4KB,則虛擬地址的 11:0位表示虛擬地址偏移值,12位以上表示虛擬頁面框號。處理器處理虛擬地址時必須完成地址分離工作。在頁表的幫助下,它將虛擬頁面框號轉換成物理頁面框號,然後訪問物理頁面中相應偏移處。
圖3.1給出了兩個進程X和Y的虛擬地址空間,它們擁有各自的頁表。這些頁表將各個進程的虛擬頁面映射到內存中的物理頁面。在圖中,進程X的虛擬頁面框號0被映射到了物理頁面框號1。理論上每個頁表入口應包含以下內容:
1、有效標記,表示此頁表入口是有效的
2、頁表入口描敘的物理頁面框號
3、訪問控制信息。用來描敘此頁可以進行哪些操作,是否可寫?是否包含執行代碼?
4、虛擬頁面框號是為頁表中的偏移。虛擬頁面框號5對應表中的第6個單元(0是第一個)。
為了將虛擬地址轉換為物理地址,處理器首先必須得到虛擬地址頁面框號及頁內偏移。一般將頁面大小設為2的次冪。將圖3.1中的頁面大小設為0x2000位元組(十進制為8192)並且在進程Y的虛擬地址空間中某個地址為0x2194,則處理器將其轉換為虛擬頁面框號1及頁內偏移0x194。
處理器使用虛擬頁面框號為索引來訪問處理器頁表,檢索頁表入口。如果在此位置的頁表入口有效,則處理器將從此入口中得到物理頁面框號。如果此入口無效,則意味著處理器存取的是虛擬內存中一個不存在的區域。在這種情況下,處理器是不能進行地址轉換的,它必須將控制傳遞給操作系統來完成這個工作。
某個進程試圖訪問處理器無法進行有效地址轉換的虛擬地址時,處理器如何將控制傳遞到操作系統依賴於具體的處理器。通常的做法是:處理器引發一個頁面失效錯而陷入操作系統核心,這樣操作系統將得到有關無效虛擬地址的信息以及發生頁面錯誤的原因。
再以圖3.1為例,進程Y的虛擬頁面框號1被映射到系統物理頁面框號4,則再物理內存中的起始位置為 0x8000(4 * 0x2000)。加上0x194位元組偏移則得到最終的物理地址0x8194。
通過將虛擬地址映射到物理地址,虛擬內存可以以任何順序映射到系統物理頁面。例如,在圖3.1中,進程X的虛擬頁面框號0被映射到物理頁面框號1而虛擬頁面框號7被映射到物理頁面框號0,雖然後者的虛擬頁面框號要高於前者。這樣虛擬內存技術帶來了有趣的結果:虛擬內存中的頁面無須在物理內存保持特定順序。

③ 如何將實體抽象成數據模型這類的拜託了各位 謝謝

聯系:實體集之間的對應關系稱為聯系,它反映現實世界事物之間的相互關聯。聯系分為兩種,一種是實體內部各屬性之間的聯系。另一種是實體之間的聯系。 機器世界 存入計算機系統里的數據是將概念世界中的事物數據化的結果。為了准確地反映事物本身及事物之間的各種聯系,資料庫中的數據必須有一定的結構,這種結構用數據模型來表示。數據模型將概念世界中的實體,及實體間的聯系進一步抽象成便於計算機處理的方式。 數據模型由三部分組成,即模型結構、數據操作和完整性規則。這里主要介紹模型結構。DBMS所支持的數據模型分為四種:層次模型、網狀模型、關系模型、面向對象模型。其中第四種數據模型目前並未成熟,因此傳統的說法有前三種數據模型。 1、基本層次聯系 層次模型和網狀模型有共同點,可以把它們統稱為格式化模型。基本層次聯系就是包括兩結點和一邊的基本單元,兩個實體間的有向邊代表的基本層次聯系表示一對多的聯系。通常把表示1的實體放在上方,稱為父結點,把表示N的實體放在下面,稱為子結點。 2、層次數據模型 用村形結構表示實體及其之間的聯系的模型稱為層次模型。該模型的實際存儲數據由鏈接指針來體現聯系。特點:有且僅有一個結點無父結點,此結點即為根結點;其它結點有且僅有一個父結點。適合用表示一對多的聯系。 3、網狀模型 用網狀結構表示實體及其之間的聯系的模型稱為網狀模型。允許結點有多於一個的父結點,可以有一個以上的結點無父結點。適合用於表示多對多的聯系。 層次模型和網狀模型從本質上都是一樣的。存在的缺陷:難以實現系統擴充,插入或刪除數據時,涉及到大量鏈接指針的調整。

④ 閱讀STL(Standard Template Library)中有關常見的抽象數據類型的實現源碼並應用 要求:

閱讀STL(Standard Template Library)中有關常見的抽象數據類型的實現源碼並應用。(30分)
抽象數據類型(ADT)是指一個數學模型以及定義在該模型上的一組操作。在STL中實現了堆棧(stack)、隊列(queue)、堆(heap)、優先隊列(priority-queue)等抽象數據類型,每種類型都具有常用的操作。
要求:選其中一種抽象數據類型閱讀其實現原理(不局限於以上列出的數據類型),其後根據自己的理解書寫閱讀心得,可將其與第1部分自己實現的數據結構進行比較優劣,並就自己選擇的數據類型舉一個應用例子實現。所選擇例子可以是北大OJ上的題目,也可以是自己想到的合適應用實例。不管是何種情況,要有相應的源碼實現。
有關STL的相應介紹可參考附件的《STL源碼剖析》。

⑤ 統一軟體過程的核心工作流

RUP中有9個核心工作流,分為6個核心過程工作流(Core Process Workflows)和3個核心支持工作流(Core Supporting Workflows)。盡管6個核心過程工作流可能使人想起傳統瀑布模型中的幾個階段,但應注意迭代過程中的階段是完全不同的,這些工作流在整個生命周期中一次又一次被訪問。9個核心工作流在項目中輪流被使用,在每一次迭代中以不同的重點和強度重復。
1. 商業建模(Business Modeling)
商業建模工作流描述了如何為新的目標組織開發一個構想,並基於這個構想在商業用例模型和商業對象模型中定義組織的過程,角色和責任。
2. 需求(Requirements)
需求工作流的目標是描述系統應該做什麼,並使開發人員和用戶就這一描述達成共識。為了達到該目標,要對需要的功能和約束進行提取、組織、文檔化;最重要的是理解系統所解決問題的定義和范圍。
3. 分析和設計(Analysis & Design)
分析和設計工作流將需求轉化成未來系統的設計,為系統開發一個健壯的結構並調整設計使其與實現環境相匹配,優化其性能。分析設計的結果是一個設計模型和一個可選的分析模型。設計模型是源代碼的抽象,由設計類和一些描述組成。設計類被組織成具有良好介面的設計包(Package)和設計子系統(Subsystem),而描述則體現了類的對象如何協同工作實現用例的功能。 設計活動以體系結構設計為中心,體系結構由若干結構視圖來表達,結構視圖是整個設計的抽象和簡化,該視圖中省略了一些細節,使重要的特點體現得更加清晰。體系結構不僅僅是良好設計模型的承載媒介,而且在系統的開發中能提高被創建模型的質量。
4. 實現(Implementation)
實現工作流的目的包括以層次化的子系統形式定義代碼的組織結構;以組件的形式(源文件、二進制文件、可執行文件)實現類和對象;將開發出的組件作為單元進行測試以及集成由單個開發者(或小組)所產生的結果,使其成為可執行的系統。
5. 測試(Test)
測試工作流要驗證對象間的交互作用,驗證軟體中所有組件的正確集成,檢驗所有的需求已被正確的實現, 識別並確認缺陷在軟體部署之前被提出並處理。RUP提出了迭代的方法,意味著在整個項目中進行測試,從而盡可能早地發現缺陷,從根本上降低了修改缺陷的成本。測試類似於三維模型,分別從可靠性、功能性和系統性能來進行。
6. 部署(Deployment)
部署工作流的目的是成功的生成版本並將軟體分發給最終用戶。部署工作流描述了那些與確保軟體產品對最終用戶具有可用性相關的活動,包括:軟體打包、生成軟體本身以外的產品、安裝軟體、為用戶提供幫助。在有些情況下,還可能包括計劃和進行beta測試版、移植現有的軟體和數據以及正式驗收。
7. 配置和變更管理(Configuration & Change Management)
配置和變更管理工作流描繪了如何在多個成員組成的項目中控制大量的產物。配置和變更管理工作流提供了准則來管理演化系統中的多個變體,跟蹤軟體創建過程中的版本。工作流描述了如何管理並行開發、分布式開發、如何自動化創建工程。同時也闡述了對產品修改原因、時間、人員保持審計記錄。
8. 項目管理(Project Management)
軟體項目管理平衡各種可能產生沖突的目標,管理風險,克服各種約束並成功交付使用戶滿意的產品。其目標包括:為項目的管理提供框架,為計劃、人員配備、執行和監控項目提供實用的准則,為管理風險提供框架等。
9. 環境(Environment)
環境工作流的目的是向軟體開發組織提供軟體開發環境,包括過程和工具。環境工作流集中於配置項目過程中所需要的活動,同樣也支持開發項目規范的活動,提供了逐步的指導手冊並介紹了如何在組織中實現過程。

⑥ 抽象邏輯思維是什麼的核心

抽象邏輯思維
以抽象概念為形式的思維,是人類思維的核心形態.它主要依靠概念、判斷和推理進行思維,是人類最基本也是運用最廣泛的思維方式.一切正常人都具備邏輯思維能力,但一定有高下之分.

⑦ 領域模型的抽象業務模型

經過分析,我們得出的實體是蘋果、梨、葡萄、橘子、香蕉、荔枝、核桃,這些是不是模型呢?應該說還不是,還要經過進一步分析:在我們分析的業務領域內,它們有沒有共性?蘋果、梨、葡萄、橘子、香蕉、荔枝屬於水果,核桃屬於乾果,它們都是果品的一個具體實例。而在水果中葡萄和荔枝屬於不宜保存水果,通過這樣進一步的分析得出如下的領域模型:
果品進銷存領域模型
這個領域模型不但能反映當前的經營實體,同時給我們需求分析人員和系統功能提供了一定的擴展視野:將來會不會經營食品,短期保持水果採取什麼利潤空間來促銷,長期保存的水果會不會因為保存成本而導致利潤下降。

⑧ 抽象模型有哪些

幾何,數學,五行,陰陽,八卦,五臟六腑,十二脈。

⑨ 什麼是抽象數據模型主要特點是什麼

數據抽象
概念結構是對現實世界的一種抽象

從實際的人、物、事和概念中抽取所關心的共同特性,忽略非本質的細節

把這些特性用各種概念精確地加以描述

這些概念組成了某種模型

三種常用抽象

1. 分類(Classification)

定義某一類概念作為現實世界中一組對象的類型

這些對象具有某些共同的特性和行為

它抽象了對象值和型之間的「is member of」的語義

在E-R模型中,實體型就是這種抽象

2. 聚集(Aggregation)

定義某一類型的組成成分

它抽象了對象內部類型和成分之間「is part of」的語義

在E-R模型中若干屬性的聚集組成了實體型,就是這種抽象

3. 概括(Generalization)

定義類型之間的一種子集聯系

它抽象了類型之間的「is subset of」的語義

概括有一個很重要的性質:繼承性。子類繼承超類上定義的所有抽象。

註:原E-R模型不具有概括,本書對E-R模型作了擴充,允許定義超類實體型和子類實體型。

用雙豎邊的矩形框表示子類,

用直線加小圓圈表示超類-子類的聯系

數據抽象的用途

對需求分析階段收集到的數據進行分類、組織(聚集),形成

實體

實體的屬性,標識實體的碼

確定實體之間的聯系類型(1:1,1:n,m:n)

/**************稀疏矩陣的抽象數據模型**************/
#include<iostream>
#include<cstdlib>
using namespace std;
/***Writed by Yecon***/

const int MaxTerms = 20; //三元組表smArray中三元組個數的最大值
template <class Type> class SparseMatrix; //稀疏矩陣的類聲明
template <class Type> class Trituple
{
//三元組類
friend class SparseMatrix<Type>;
private:
int row,col;
Type value;
};
template <class Type> class SparseMatrix
{
int Rows, //行數
Cols, //列數
Terms; //非零元個數
Trituple<Type> smArray[MaxTerms]; //三元組表
public:
SparseMatrix(int MaxRows,int MaxCols); //構造函數
bool input_data(int row,int col,Type value); //輸入數據
SparseMatrix<Type> Transpose(); //轉置矩陣
SparseMatrix<Type> Add(SparseMatrix<Type> b); //矩陣求和
SparseMatrix<Type> Mul(SparseMatrix<Type> b); //矩陣求積
SparseMatrix<Type> EmptyMatrix(); //返回零矩陣
};

template <class Type> SparseMatrix<Type>::SparseMatrix(int MaxRows,int MaxCols)
{
Rows = MaxRows; //行數置零
Cols = MaxCols; //列數置零
Terms = 0; //非零元個數置零
}
template <class Type> bool SparseMatrix<Type>::input_data(int row,int col,Type value)
{
if(Terms == MaxTerms || row > Rows || col > Cols)return false;
if(Terms == 0)//若是第一個元素
{
//插入第一個元素
smArray[Terms].row = row;
smArray[Terms].col = col;
smArray[Terms].value = value;
Terms++;
return true;
}
if((row>smArray[Terms-1].row)||((row==smArray[Terms-1].row)&&(col>smArray[Terms-1].col)))//若是最後一個元素
{
//插入最後一個元素
smArray[Terms].row = row;
smArray[Terms].col = col;
smArray[Terms].value = value;
Terms++;
return true;
}
//若非第一個活最後一個元素
//計算應該插入的位置
int k = Terms - 1;
for(int i = Terms - 1;i >= 0;i--)//確定行
if(smArray[i].row >= row)k = i;
for(int j = k;smArray[j].row == row;j++)//確定列
if(smArray[j].col <= col)k = j;
for(int i = Terms -1;i >= k;i--)//為待插入的元素騰出地方
smArray[i + 1] = smArray[i];
smArray[k].col = col;
smArray[k].row = row;
smArray[k].value = value;
Terms++;
return true;
}
template <class Type> SparseMatrix<Type> SparseMatrix<Type>:: Transpose()
{
//求矩陣的轉置
int * rowSize = new int[Cols]; //輔助數組,統計個列非零元素個數
int * rowStart = new int[Cols]; //輔助數組,預計轉置後各行存放位置
SparseMatrix<Type> b(Cols,Rows);//存放轉置結果
// b.Rows = Cols;b.Cols = Rows;b.Terms = Terms;
if(Terms > 0)
{
//統計矩陣b中第i行非零元素個數
for(int i = 0;i < Cols;i++)rowSize[i] = 0; //清零
for(int i = 0;i < Terms;i++)rowSize[smArray[i].col]++;//根據矩陣this中第i個非零元素的列號,將rowSize相當該列的計數加1
//計算矩陣b第i行非零元素的開始存放位置
rowStart[0] = 0;
for(int i = 1;i < Cols;i++) //rowStart[i] = 矩陣b的第i行的開始存放位置
rowStart[i] = rowStart[i - 1] + rowSize[i - 1];
for(int i = 0;i < Terms;i++)
{
//從this向b傳送
int j = rowStart[smArray[i].col]; //j為第i個非零元素在b中應存放的位置
b.smArray[j].row = smArray[i].col;
b.smArray[j].col = smArray[i].row;
b.smArray[j].value = smArray[i].value;
rowStart[smArray[i].col]++; //矩陣b第i行非零元素的存放位置加1
}
}
delete []rowSize;
delete []rowStart;
return b;
}
template <class Type> SparseMatrix<Type> SparseMatrix<Type>::Mul(SparseMatrix<Type> b)
{
//矩陣求積
if(Cols != b.Rows)
{
//this矩陣列數與b矩陣行數不能
cout << "Incompatible matrix" << endl;
return EmptyMatrix();
}
if(Terms == MaxTerms || b.Terms == MaxTerms) //有一個矩陣的項數達到最大
{
cout << "One additional space in a or b needed" << endl;
return EmptyMatrix(); //空間不足,返回空矩陣
}
int * rowSize = new int[b.Rows]; //輔助數組,矩陣b各行非零元素個數
int *rowStart = new int[b.Rows + 1]; //輔助數組,矩陣b各行的三元組起始位置
Type *temp = new Type[b.Cols]; //臨時數組,暫存每一行計算結果
SparseMatrix<Type> result(Rows,Cols); //結果矩陣的三元組表
for(int i = 0;i < b.Rows;i++) rowSize[i] = 0; //統計矩陣b中第i行非零元素個數
for(int i = 0;i < b.Terms;i++)rowSize[smArray[i].row]++;
rowStart[0] = 0; //計算矩陣b第i行非零元素的開始位置
for(int i = 1;i <= b.Rows;i++)rowStart[i] = rowStart[i - 1] + rowSize[i - 1];
int Current = 0,lastInResult = -1;//a.smArray掃描指針及result存放指針
while(Current < Terms)
{
//生成result的當前行temp
int RowA = smArray[Current].row; //當前行的行號
for(int i = 0;i < b.Cols;i++)temp[i] = 0; //temp初始化
while(Current < Terms && smArray[Current].row == RowA)
{
int ColA = smArray[Current].col; //矩陣A當前掃描到元素的列號
for(int i = rowStart[ColA];i < rowStart[ColA + 1];i++)
{
int ColB = b.smArray[i].col; //矩陣b中相乘元素的列號
//A的RowA行與b的ColB列相乘
temp[ColB] = temp[ColB] + smArray[Current].value * b.smArray[i].value;
}
Current++;
}
for(int i = 0;i < b.Cols;i++)
if(temp[i] != 0)
{
//將temp中的非零元素壓縮到result中去
lastInResult++;
result.smArray[lastInResult].row = RowA;
result.smArray[lastInResult].col = i;
result.smArray[lastInResult].value = temp[i];
}
}
result.Rows = Rows;
result.Cols = b.Cols;
result.Terms = lastInResult + 1;
delete []rowSize;
delete []rowStart;
delete []temp;
return result;
}
template <class Type> SparseMatrix<Type> SparseMatrix<Type>::EmptyMatrix()
{
SparseMatrix<Type> Z(0,0);
return Z;
}
int testSparseMatrix()//main()
{
SparseMatrix<int> A(7,8);
A.input_data(0,6,15);
A.input_data(0,3,22);
A.input_data(4,0,91);
A.input_data(2,3,-6);
A.input_data(1,5,17);
A.input_data(5,2,28);
A.input_data(1,1,11);
A.input_data(3,5,39);
//test Transpose()
SparseMatrix<int> B(8,7);
B = A.Transpose();
//test Mul()
SparseMatrix<int> C(7,4);
C.input_data(2,3,5);
C.input_data(1,1,10);
C.input_data(5,2,2);
SparseMatrix<int> D(8,4);
D = B.Mul(C);
return 0;
}

⑩ 什麼是抽象模型

你是西郵的吧,我是李老師,這個題目的答案你是搜不到的,我在第一節課上面講過,自己回去看看筆記吧。

其實我只是大二通工的一個學生,騙你們的啦,下午就要收啦,大家都要給力哦,親!

閱讀全文

與核心抽象模型源碼相關的資料

熱點內容
如何啟用對伺服器遠程的訪問 瀏覽:774
程序員環境分析 瀏覽:812
tsp演算法是數據挖掘演算法嗎 瀏覽:672
編譯原理好處 瀏覽:820
怎麼買伺服器主機 瀏覽:176
什麼app可以存檔游戲 瀏覽:430
那裡有螺桿壓縮機修理 瀏覽:31
什麼電腦軟體檢測安卓機 瀏覽:728
c語言編譯沒問題組件有錯誤 瀏覽:513
迅捷pdf編輯器破解版下載 瀏覽:14
電火花線切割怎麼編程 瀏覽:776
linux查看驅動命令 瀏覽:996
蘇州車輛解壓代辦大概多少錢 瀏覽:592
租房app什麼比較靠譜 瀏覽:677
運動app如何測量運動心率 瀏覽:782
蘋果手機文件夾圖標背景圖透明度 瀏覽:735
遼寧省解壓旅遊 瀏覽:271
pdf怎麼把部分圖紙拷到文件夾 瀏覽:698
讓程序員崩潰的40個瞬間 瀏覽:546
macbookair修改文件夾名稱 瀏覽:433