Tổng hợp tiếng nói bằng phương pháp trực tiếp

Tổng hợp tiếng nói bằng phương pháp trực tiếp với đơn vị ghi âm là các âm vị kép.

Các âm vị kép cần phải ghi âm trước là:

  • Ti
  • In
  • Mi

Từ các âm vị kép trên hãy tổng hợp thành các từ có nghĩa có thể có

Yêu cầu:

  • Ghi âm bằng Micro

Và tạo lại tín hiệu ghi âm ở loa

  • Ghép các âm vị kép đã ghi âm sao cho chất lượng tiếng nói tổng hợp tốt nhất.
  • Hiển thị tín hiệu tiếng nói của từ đã tổng hợp.

Phần II:

BÁO CÁO CHƯƠNG TRÌNH

  1. Cơ sở lý thuyết

  1. File RIFF (RIFF: Resource Interchange File Format)

 

          File Wave là tập tin chứa các dữ liệu của mẫu âm thanh đã được số hoá. Phương pháp số hoá âm thanh hiện nay là phương pháp PCM. Phương pháp này sẽ lấy mẫu âm thanh với khoảng tần số từ 11.025kHz cho đến 44.1 kHz. Mỗi lần lấy mẫu, số liệu lại được lượng tử hoá bằng 1 hay 2 byte cho 1 mẫu âm thanh. Như vậy tần số lấy mẫu càng cao, số byte dùng lượng tử hoá càng nhiều thì âm thanh phát lại càng trung thực, nhưng lại tăng số byte cần lưu trữ. Với một mẫu âm thanh phát ra trong một phút cần phải lưu trữ ít nhất 660 kB. Đó là lý do tại sao các wave file luôn có kích thước khá lớn so với file midi.

          Cấu trúc của file wave thuộc vào lớp file được sử dụng bởi các hàm Multimedia của Windows, cụ thể là: file RIFF (dạng file trao đổi tài nguyên).

Một file RIFF gồm một hoặc nhiều chunk, trong mỗi chunk lại chứa con trỏ chỉ đến chunk kế tiếp.

Mỗi chuck bao gồm:

  • Loại chunk
  • Dữ liệu theo sau loại chunk đó.

Một ứng dụng muốn đọc file RIFF có thể đi qua lần lượt từng chunk, đọc dữ liệu ở chunk nó quan tâm và có thể bỏ qua các chunk mà nó không quan tâm. Một chunk của file RIFF luôn bắt đầu bằng một header có cấu trúc như sau:

Typedef struct

{

FOURCC ckid;

DWORD ckSize;

} CK;

Trong đó:

  1. Trường FOURCC:
  • Kích thước 4 byte, xác đinhl loại chunk
  • Mang giá trị “WAVE”, nếu là file WAVE.
  • Chú ý: Nếu loại chunk ít hơn 4 ký tự thì các ký tự còn lại bên phải sẽ được thêm vào các khoảng trắng. Trong trường FOURCC phân biệt giữa chữ hoa và chữ thường.
  • Trường DWORD:
  • Chứa kích thước vùng dữ liệu của chunk

Vùng dữ liệu này nằm ngay sau header và có kích thước là: ckSize byte. Chunk có thể chứa các subchunk. Subchunk cũng là một chunk. Một file RIFF luôn bắt đầu bằng một chunk loại “RIFF”.

  1. Cấu trúc file Wave

          File Wave bắt đầu  là chunk loại “RIFF”. Hai subchunk “fmt” và “data” trong wave chunk đặc tả thông tin về âm thanh của file wave, tiếp đó là dữ liệu của từng subchunk.Cụ thể:

  1. Subchunk “fmt”

          Dữ liệu của fmt chunk là đối tượng WAVEFORMAT có cấu trúc như sau:

Typedef struct waveformat_tag

{

WORD wFormatTag;

WORD nChannels;

DWORD nSamplesPerSec;

DWORD nAvgBytesPerSec;

WORD nBlockAlign;

} WAVEFORMAT;

Trong đó:

  • wFormatTag thường có giá trị là WAVE_FORMAT_PCM được định nghĩa trong tập tin  MMSYSTEM.H  như sau:

#define WAVE_FORMAT_PCM 1

Giá trị này báo cho phần mềm đang đọc Wave file biết kiểu mã hoá dữ liệu âm thanh sang dữ liệu số là kiểu mã hoá PCM. Hiện nay đây là kiểu mã hoá duy nhất của Wave file.

  • nChannels: có hai giá trị : bằng 1 cho âm thanh mono và bằng 2 cho âm thanh stereo.
  • nSamplesPerSec: cho biết tốc độ lấy mẫu, có các giá trị:

11025 — 11.025 kHz

22050 — 22.050 kHz

44100 — 44.100 kHz

  • nAvgBytesPerSec: cho biết số byte yêu cầu trung bình trong một giây để phát lại mẫu dữ liệu của sóng âm.
  • nBlockAlign: cho biết số byte dùng để chứa một mẫu âm thanh. Như vậy mẫu 8 bit hay ít hơn sẽ yêu cầu 1 byte, mẫu 9 đến 16 bit sẽ yêu cầu 2 byte. Nếu âm thanh là stereo thì yêu cầu số byte gấp 2 lần âm thanh mono.

Ta thấy trong WAVEFORMAT chưa có thông tin về số bit dùng để lượng tử hoá một mẫu dữ liệu của sóng âm. Thực tế Wave file sẽ xác lập số bit dùng cho một mẫu dữ liệu bằng một trường gắn vào cuối cấu trúc của WAVEFORMAT. Cấu trúc đó như sau:

Typedef struct pcmwaveformat_tag

{

WAVEFORMAT wf;

WORD wBitsPerSample;

} PCMWAVEFORMAT;

Trong đó:

  • wBitsPerSample: cho biết số bit trong một mẫu dữ liệu.

Chú ý:

Các mẫu dữ liệu vẫn phải lưu trữ ở dạng byte hoặc word. Do đó, nếu một wave file dùng 12 bit để lượng tử hoá một mẫu sóng âm thì sẽ phải lưu trữ 4 bit thừa không dùng đến.

  1. Subchunk “data”

 

Dữ liệu của data subchunk của wave file chứa các số liệu của âm thanh đã được số hoá. Đối với mẫu âm thanh 8 bit, dữ liệu của data subchunk bao gồm các giá trị 1 byte (có giá trị trong khoảng 0-255) của các mẫu âm thanh. Đối với mẫu âm thanh 16 bit, mỗi mẫu dữ liệu gồm 2 byte (có giá trị trong khoảng từ -32768 đến 32767). Điều này không có nghĩa là file wave 16 bit sẽ nghe to hơn 256 lần file wave 8 bit, mà nó có nghĩa là âm thanh được lượng tử hoá chính xác hơn, nghe trung thực hơn.

Trong mẫu mono 8 bit, dữ liệu của data subchunk gồm chuỗi các giá trị 1 byte. Với stereo 8 bit, mỗi mẫu gồm 2 byte, dữ liệu sẽ được sắp xếp xen kẽ (interleave), với byte đầu (byte chẵn) là mẫu âm thanh của kênh bên trái, byte sau (byte lẻ) là của kênh bên phải

_Cấu trúc file Wave_

  1. Đọc File RIFF

          Để làm việc với file RIFF, ta phải mở nó và “descend” vào chunk mà ta cần. Điều này có nghĩa là ta cần phải định vị được chunk này, rồi chuyển con trỏ file vào đầu khối dữ liệu của chunk. Khi làm việc xong với 1 chunk ta phải “ascend” ra khỏi chunk và “descend” xuống chunk khác.

          Các hàm dùng xử lý RIFF file đều có tiền tố là mmio và làm việc với file handle dạng HMMIO. Để bắt đầu, ta phải mở file bằng đoạn mã sau:

HMMIO h;

if ((h=mmioOpen(path,NULL,MMIO_READ))==NULL)

{

/*báo lỗi*/

return(0);

}

Trong đó:

  • Thông số path chứa đường dẫn của file wave.
  • Cờ MMIO_READ báo cho mmioOpen mở file để đọc. Ta cũng có thể mở nó để ghi bằng thông số MMIO_WRITE hay cả đọc và ghi bằng thông số MMIO_READWRITE.
  • Nếu mở file thành công, mmioOpen sẽ trả về một handle loại HMMIO.

Nếu thất bại, nó sẽ trả về trị NULL.

Sau khi mở file xong, ta bắt đầu định vị Wave chunk bằng đoạn mã sau:

MMCKINFO mmParent;

MmParent.fccType=mmioFOURCC(‘W’,’A’,’V’,’E’);

if (mmioDescend(h,(LPMMCKINFO)& mmParent, NULL,MMIO_FINDRIFF))

{

mmioClose(h,0);

/* báo lỗi */

return(0);

}

           Cấu trúc của MMCKINFO chứa các thông tin về chunk. Nó được định nghĩa trong MMSYSTEM.H như sau:

Typedef struct

{

FOURCC ckid;

DWORD cksize;

FOURCC fcctype;

DWORD dwDataOffset;

DWORD dwFlags;

} MMCKINFO;

Trong đó:

  • Để “đi vào” một chunk, ta cho trường ckid của MMCKINFO ở loại chunk mà ta muốn định vị. Có một macro thực hiện việc này là mmioFOURCC. Sau đó gọi hàm mmioDescend để định vị chunk. Nếu định vị thành công, hàm này trả về giá trị 0 và đối tượng MMCKINFO truyền cho hàm sẽ được điền vào các thông tin về chunk.
  • Trường cksize định nghĩa kích thước tính bằng byte của chunk.
  • Đối số thứ ba của mmioDescend là cờ MMIO_FINDRIFF.

Cờ này chỉ thị cho mmioDescend tìm một file có ID là RIFF với loại chunk được xác định bởi ckid. Nếu muốn tìm một chunk trong Wave file ta cho cờ này là MMIO_FINDCHUNK.

Sau khi đi vào Wave chunk, ta bắt đầu đi vào fmt subchunk của nó:

MMIOCKINFO mmSub;

MmSub.ckid=mmioFOURCC(‘f’,’m’,’t’);

if (mmioDescend(h,(LPMMCKINFO)& mmSub,(LPMMCKINFO)&

mmParent,MMIO_FINDCHUNK))

{

mmioClose(h,0);

/* báo lỗi */

return(0);

}

          Đến đây ta đã có thể bắt đầu đọc dữ liệu từ Wave File. Đoạn mã sau đọc đối tượng PCMWAVEFORMAT từ fmt subchunk:

PCMWAVEFORMAT waveformat;

Int n;

n = min ((unsigned int)mmSub.cksize,sizeof(PCMWAVEFORMAT));

if(mmioRead(h,(LPSTR)&waveformat,(long)n) !=(long)n)

{

/* báo lỗi */

return(0L);

}

if(waveformat.wf.wFormatTag !=WAVE_FORMAT_PCM)

{

/* BÁO LỖI */

mmioClose(h,0);

return(0L);

}

Trong đó:

  • Đối số đầu tiên của mmioRead là handle của file đang đọc.
  • Đối số thứ hai là con trỏ xa trỏ tới vùng đệm để chứa dữ liệu.
  • Đối số thứ ba là số byte cần đọc. Hàm này sẽ trả về số byte thực sự đọc được.

Sau khi đã đọc nội dung của chunk, ta đi ra khỏi chunk để chuẩn bị đọc chunk kế tiếp:

mmAscend(h,(LPMMCKINFO)&mmSub,0);

Trong đó:

  • Đối số thứ hai của mmAscend là đối tượng MMCKINFO của chunk mà ta “đi ra”.
  • Đối số thứ ba là đối số giả.

Công việc còn lại là đọc dữ liệu mã hoá âm thanh của Wave file vào bộ nhớ. Chú ý rằng giá trị cksize trả về bởi mmioDescend được sử dụng để xác định kích thước vùng đệm cần cấp phát để chứa dữ liệu.

GOBALHANDLE wavehandle;

HPSTR wavepointer;

MmSub.ckid=mmioFOURCC(‘d’,’a’,’t’,’a’);

if(mmioDescend(h,(LPMMCKINFO)&mmSub,(LPMMCKINFO)&mmParent, MMIO_FINDCHUNK))

{

mmioClose(h,0);

/* báo lỗi */

return(0);

}

if((wavehandle=GlobalAlloc(GMEM_MOVEBLEIGMEM_SHARE, mmSub.cksize))==NULL)

{

mmioClose(h,0);

/* báo lỗi */

return(0);

}

if(wavepointer=(HPSTR)gLOBALlOCK(WAVEHANDLE))==null)

{

GlobalFree(wavehandle);

mmioClose(h,0);

/* báo lỗi */

return(0);

}

if(mmioRead(h,wavepointer,mSub.cksize) !=mSub.cksize)

{

GlobalUnlock(wavehandle);

GlobalFree(wavehandle);

mmioClose(h,0);

/* báo lỗi */

return(0);

}

GlobalUnlock(wavehandle);

 

  1. Phương pháp tổng hợp tiếng nói từ các âm vị kép

          Dùng micro đọc các âm vị kép cho trước vào 2 file

  • Ti/Mi đọc vào một file
  • In đọc vào một file

Sau đó dùng hai con trỏ trỏ vào vùng dữ liệu của hai file trên, hai con trỏ được sử dụng gồm:

  • m_pcData1 trỏ vào vùng data của file Ti/Mi
  • m_pcData2 trỏ vào vùng data của file In

Hai con trỏ trên dùng để ghép hai vùng dữ liệu với nhau, sau đó ghi

vào file Synthetize. wav

  1. Chương trình

 

  1. Đọc file Wave

/*

      Open wave file with file name is @strFileName and window receives wave

                                        out message is *pParent.

                  Function return 0 if open succesfully. otherwise return -1

*/

int CWave::OpenFile(LPCTSTR strFileName)

{

          HMMIO hmmio;       //Handle multimedia input/output

MMRESULT   result; //Multimedia input/output result

          MMCKINFO   *pmmcki,*pmmckiParent;  //Multimedia chunk information

LONG           sizeread;       //Number byte are read

          DWORD                 dataread;      //Data bytes count are read of wave file

          //Open multimedia file does not have buffer or input/output procedure

          //Open for read data

          hmmio = mmioOpen((LPTSTR)strFileName,NULL,MMIO_READ);

          if(hmmio == NULL)

          {

                   AfxMessageBox(“Khong the mo duoc file nay”,MB_ICONSTOP);

                   return -1;

          }

          //Give memory for pmmckifParent and pmmckif

          pmmckiParent = new MMCKINFO;

          pmmcki                  = new MMCKINFO;

          /*if do not enough memory then

                   – report error to user

                   – close MMIO file Which you are opened

                   – exit function

          */

          if((pmmckiParent==NULL)||(pmmcki==NULL))

          {

                   AfxMessageBox(“Khong du bo nho”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   return -1;

          }

          //Find riff chunk

          pmmckiParent->ckid = mmioFOURCC(‘R’,’I’,’F’,’F’);

          pmmckiParent->fccType = mmioFOURCC(‘W’,’A’,’V’,’E’);

          result = mmioDescend(hmmio,pmmckiParent,NULL,MMIO_FINDRIFF);

          //if chunk not found then report and exit function

          if(result == MMIOERR_CHUNKNOTFOUND)

          {

                   AfxMessageBox(“Day khong phai la RIFF file”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   return -1;

          }

          //Find format chunk

          pmmcki->ckid = mmioFOURCC(‘f’,’m’,’t’,’ ‘);

          result = mmioDescend(hmmio,pmmcki,pmmckiParent,MMIO_FINDCHUNK);

          //if chunk not found then report and exit function

          if(result == MMIOERR_CHUNKNOTFOUND)

          {

                   AfxMessageBox(“File nay khong co doan format”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   return -1;

          }

          //Read data of format chunk and store in m_stWaveFormatEx

          sizeread = mmioRead(hmmio,(char *)&m_stWaveFormatEx,sizeof(WAVEFORMATEX));//Doc cau truc format cua file

          if(sizeread != sizeof(WAVEFORMATEX))

          {

                   AfxMessageBox(“Co loi khi doc file”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   return -1;

          }

          //If file format is not WAVE_FORMAT_PCM then report and exit function

          if(m_stWaveFormatEx.wFormatTag != WAVE_FORMAT_PCM)

          {

                   AfxMessageBox(“File nay khong phai la file PCM”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   return -1;

          }

          //Go to end of format chunk

          result = mmioAscend(hmmio,pmmcki,0);

          //if the end of format chunk is not found then report and exit function

          if(result != MMSYSERR_NOERROR)

          {

                   AfxMessageBox(“Co loi trong cau truc file”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   return -1;

          }

          //Find data chunk

          pmmcki->ckid = mmioFOURCC(‘d’,’a’,’t’,’a’);

          result = mmioDescend(hmmio,pmmcki,pmmckiParent,MMIO_FINDCHUNK);

          //If chunk not found then report and exit function

          if(result == MMIOERR_CHUNKNOTFOUND)

          {

                   AfxMessageBox(“Khong tim thay doan data”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   return -1;

          }

          //Go to position that store data chunk size

          sizeread = mmioSeek(hmmio,-4,SEEK_CUR);

          if(sizeread == -1)

          {

                   AfxMessageBox(“Co loi khi tim kich thuoc doan du lieu”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   return -1;

          }

          //Read data chunk size

        sizeread = mmioRead(hmmio,(char* )&m_dwDataSize,sizeof(DWORD));

          //if size read is not equance size of DWORD then report and exit function

          if(sizeread != sizeof(DWORD))

          {

                   AfxMessageBox(“Co loi khi doc kich thuoc doan du lieu”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   return -1;

          }

          //Allocate mamory to store data

          //If has allocated then free and reallocate

          if(m_pcData != NULL)

          {

                   delete m_pcData;

                   m_pcData = NULL;

          }

          m_pcData = new char[m_dwDataSize];

          if(m_pcData == NULL)

          {

                   AfxMessageBox(“Thieu bo nho de doc du lieu”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   return -1;

          }

          //Read data of data chunk. If has error then report and exit function

          dataread = mmioRead(hmmio,m_pcData,m_dwDataSize);

          if(dataread != m_dwDataSize)

          {

                   AfxMessageBox(“Co loi khi doc du lieu cua file”,MB_ICONSTOP);

                   mmioClose(hmmio,MMIO_FHOPEN);

                   delete pmmcki;

                   delete pmmckiParent;

                   delete m_pcData;

                   m_pcData = NULL;

                   return -1;

          }

          //Free memory and close multimedia input/ouput procedure

          delete pmmcki;

          delete pmmckiParent;

          mmioClose(hmmio,MMIO_FHOPEN);

          return 0;

}

  1. Hiển thị tín hiệu tiếng nói

Xây dựng hàm Draw() để vẽ dạng sóng hiển thị tiếng nói, hàm Draw

được thiết kế như sau:

void CWndView::Draw()

{

     int i;

     int x,y;

     Eraser();

     CDC* pDC=GetDC();

     DrawAxis(pDC);

     CPen* pOldPen=pDC->SelectObject(&m_LinePen);

     y=(int)floor(m_deltaY*m_pData[0]);

     pDC->MoveTo(Xpos,Ypos-y);

     if(m_iType==3)

     {

          pDC->Ellipse(Xpos-4,Ypos-y-4,Xpos+4,Ypos-y+4);

         for(i=0;i<m_iSize;i++)

         {

                x=(int)(m_deltaX)*i;

                y=(int)floor(m_deltaY*m_pData[i]);

                pDC->LineTo(Xpos+x,Ypos-y);

                pDC->Ellipse(Xpos+x-2,Ypos-y-2,Xpos+x+2,Ypos-y+2);

         }

     }

     else

    {

         for(i=0;i<m_iSize;i++)

         {

                 x=(int)floor(m_deltaX*i);

                 y=(int)floor(m_deltaY*m_pData[i]);

                 pDC->LineTo(Xpos+x,Ypos-y);

         }

     }

    pDC->SelectObject(pOldPen);

    ReleaseDC(pDC);

}

  1. Ghép dữ liệu hai file Ti/Mi và In

 

int CWave::Save(LPCTSTR strFileName)

{

          MMRESULT   result;

          HMMIO                  hmmio;

          MMCKINFO   mmParckif,mmSubckif;

          LONG           sizewrite;

          hmmio = mmioOpen((char*)strFileName,NULL,MMIO_WRITE|MMIO_CREATE);

          if(hmmio == NULL)

          {

                   AfxMessageBox(“Khong the tao file moi”);

                   return -1;

          }

          m_dwDataSize = m_dwDataSize1+ m_dwDataSize2;

          mmParckif.cksize = 4+8+sizeof(WAVEFORMATEX)+8+m_dwDataSize;

          mmParckif.fccType = mmioFOURCC(‘W’,’A’,’V’,’E’);

          mmParckif.dwFlags = MMIO_DIRTY;

          //Create RIFF chunk

          result = mmioCreateChunk(hmmio,&mmParckif,MMIO_CREATERIFF);

          if(result != MMSYSERR_NOERROR)

          {

                   AfxMessageBox(“Loi khi tao doan RIFF”);

                   return -1;

          }

          mmSubckif.ckid = mmioFOURCC(‘f’,’m’,’t’,’ ‘);

          mmSubckif.cksize = sizeof(WAVEFORMATEX);

          result = mmioCreateChunk(hmmio,&mmSubckif,NULL);

          if(result != MMSYSERR_NOERROR)

          {

                   AfxMessageBox(“Loi khi tao doan format”);

                   return -1;

          }

          sizewrite = mmioWrite(hmmio,(char*)&m_stWaveFormatEx,sizeof(WAVEFORMATEX));

          if(sizewrite != sizeof(WAVEFORMATEX))

          {

                   AfxMessageBox(“Loi khi ghi du lieu cho doan format”);

                   return -1;

          }

          //Go to end of format chunk

          result = mmioAscend(hmmio,&mmSubckif,0);

          if(result != MMSYSERR_NOERROR)

          {

                   AfxMessageBox(“Khong tim thay cuoi doan format”);

                   return -1;

          }

          //Create data chunk

          mmSubckif.ckid = mmioFOURCC(‘d’,’a’,’t’,’a’);

          mmSubckif.cksize = m_dwDataSize;

          result = mmioCreateChunk(hmmio,&mmSubckif,NULL);

          if(result != MMSYSERR_NOERROR)

          {

                   AfxMessageBox(“Loi khi tao doan data”);

                   return -1;

          }

          int i;

          if(m_pcData != NULL)

          {

                   delete m_pcData;

                   m_pcData = NULL;

          }

          m_pcData = new char[m_dwDataSize];

          for(i=0;i<=m_dwDataSize1-1;i++)

          {

                   m_pcData[i] = m_pcData1[i];

          }

          for(i=m_dwDataSize1;i<=m_dwDataSize-1;i++)

          {

                   int j=i-m_dwDataSize1;

                   m_pcData[i] = m_pcData2[j];

          }

          sizewrite = mmioWrite(hmmio,m_pcData,m_dwDataSize);

          if(sizewrite != (LONG)m_dwDataSize)

          {

                   AfxMessageBox(“Loi khi ghi du lieu cho doan data”);

                   return -1;

          }

          result = mmioAscend(hmmio,&mmSubckif,0);

          if(result != MMSYSERR_NOERROR)

          {

                   AfxMessageBox(“Khong tim thay cuoi doan format”);

                   return -1;

          }

          result = mmioClose(hmmio,MMIO_FHOPEN);

          if(result != MMSYSERR_NOERROR)

          {

                   AfxMessageBox(“Loi khi dong file”);

                   return -1;

          }

          return 0;

}

Tổng hợp tiếng nói bằng phương pháp tổng hợp trực tiếp

Ngày nay thế giới chúng ta đã và đang bước vào một kỷ nguyên về sự bùng nổ thông tin. Cùng với sự phát triển như vũ bão của các phương tiện truyền thông        đại chúng thì lĩnh vực thu thập, lưu trữ và xử lý thông tin là một trong những vấn đề có ý nghĩa then chốt đối với mọi lĩnh vực nói chung và đặc biệt có ý nghĩa với ngành Công nghệ thông tin nói riêng. Trong đó, các vấn đề liên quan đế xử lý tiếng nói ngày càng được đề cập nhiều hơn, áp dụng vào thực tế nhiều hơn.

Trong phạm vi bài tập lớn này, chúng em xin đề cập đến vấn đề tổng hợp tiếng nói trực tiếp gồm có các bước : ghi âm trực tiếp các từ, tổng hợp các từ thành câu hoàn chỉnh và hiển thị tiếng nói.

Nội dung gồm các phần sau :

  1. Cấu trúc file Wave
  2. Một số thuật toán sử dụng trong chương trình
  • Chức năng chính của chương trình

  1. Cấu trúc file Wave

Tiếng nói là tín hiệu tương tự, để lưu trữ được trong máy tính đặt trưng bởi chuỗi số 01…ta phải “lấy mẫu” và “lượng tử hoá” tín hiệu tương tự thành tín hiệu số mới lưu trữ được trong máy tính. Phương pháp “lấy mẫu” và “lượng tử hoá” âm thanh hiện nay thường là phương pháp PCM. Phương pháp này sẽ lấy mẫu âm thanh với tần số khoảng từ 11.025 kHz cho đến 44.1 kHz. Mỗi giá trị mẫu được lượng tử hoá bằng 8 bits tương ứng giá trị mẫu từ –128 đến 127 hoặc lượng tử hoá bằng 16 bits tương ứng giá trị mẫu từ –32768 đến 32767. So với lượng tử hoá bằng 8 bits thì lượng tử hoá bằng 16 bits sẽ lưu trữ âm thanh trung thực hơn nhưng bù lại số byte lưu tăng gấp đôi.

1.1. RIFF file

Cấu trúc của Wave File thuộc vào lớp file được sử dụng bỡi các hàm Multimedia của Windows : đó là RIFF file. RIFF là chữ viết tắt của Resource Interchange File Format (format file trao đổi tài nguyên). Một RIFF file gồm một hoặc nhiều loại chunks, trong mỗi chunk lại chứa con trỏ để chỉ đến chunk kế tiếp.

Mỗi chunk bao gồm loại chunk và dữ liệu theo sau loại chunk đó. Một ứng dụng muốn đọc RIFF file có thể đi qua lần lượt từng chunk, đọc dữ liệu ở những chunk nó quan tâm và có thể bỏ qua các chunk mà nó không quan tâm. Một chunk của RIFF file luôn bắt đầu bỡi một header có cấu trúc như sau:

typedef struct

{

FOURCC ckID;

DWORD ckSize;

} CK;

FOURCC gồm 4 bytes chỉ ra loại chunk. Đối với Wave File, field này có giá trị là “WAVE”. Nếu loại chunk ít hơn 4 ký tự thì các ký tự còn lại bên phải sẽ được đệm thêm vào các khoảng trắng.

ckSize gồm 4 byte chứa kích thước vùng dữ liệu của chunk, vùng dữ liệu này nằm ngay sau header và có kích thước là ckSize bytes.

Chunk có thể chứa các subchunks. Subchunk cũng là một chunk. Một RIFF file luôn bắt đầu bằng một chunk loại “RIFF”.

1.2. Cấu trúc file Wave

Wave file bắt đầu là chunk loại “RIFF”. Hai subchunk trong Wave chunk đặc tả thông tin về âm thanh của wave file và tiếp đó là dữ liệu của từng subchunk. Đó là subchunk “fmt ” và subchunk “data“.

  1. Subchunk “fmt”

Dữ liệu của “fmt ” chunk là cấu trúc WAVEFORMAT có cấu trúc như sau:

typedef struct waveformat_tag

{

WORD wFormatTag;

WORD nChannels;

DWORD nSamplesPerSec;

DWORD nAvgBytesPerSec;

WORD nBlockAlign;

} WAVEFORMAT;

wFormatTag thường có giá trị là WAVE_FORMAT_PCM được định nghĩa trong tập tin MMSYSTEM.H như sau:

#define WAVE_FORMAT_PCM 1

Giá trị này báo cho phần mềm đang đọc Wave File biết kiểu mã hóa dữ liệu âm thanh sang dữ liệu số là kiểu mã hóa PCM.

nChannels có hai giá trị: bằng 1 cho âm thanh mono và bằng 2 cho âm thanh steréo.

nSamplesPerSec cho biết tốc độ lấy mẫu. Giá trị thông thường của trường này là:

11025 — 11.025 kHz •

22050 — 22.05 kHz •

44100 — 44.1 kHz

nAvgBytesPerSec cho biết số byte trung bình yêu cầu trong 1 giây để phát lại mẫu dữ liệu của sóng âm.

nBlockAlign cho biết số byte dùng để chứa một mẫu âm thanh.

Ta thấy trong WAVEFORMAT chưa có thông tin về số bit dùng để lượng tử hóa một mẫu dữ liệu của sóng âm. Thực tế, Wave File sẽ xác lập số bit dùng cho một mẫu dữ liệu bằng một trường gắn vào cuối cấu trúc của WAVEFORMAT. Cấu trúc đó được định nghĩa như sau:

typedef struc pcmwaveformat_tag

{

WAVEFORMAT wf;

WORD wBitsPerSample;

} PCMWAVEFORMAT;

wBitsPerSample cho biết số bit trong một mẫu dữ liệu. Chú ý rằng các mẫu dữ liệu vẫn phải lưu trữ ở dạng byte hoặc word. Do đó, nếu một Wave File dùng 12 bit để lượng tử hóa một mẫu sóng âm thì sẽ phải lưu trữ cả 4 bit thừa không dùng đến.

  1. Subchunk “data”

Dữ liệu của “data” subchunk của Wave File chứa các số liệu của âm thanh đã được số hóa. Đối với mẫu âm thanh 8 bit, dữ liệu của “data” subchunk bao gồm các giá trị 1 byte (có giá trị từ 0 – 255) của các mẫu âm thanh. Đối với mẫu âm thanh 16 bits, mỗi mẫu dữ liệu gồm 2 bytes (có giá trị từ -32768 tới 32767). Điều này không có nghĩa là file wave 16 bits sẽ nghe to hơn 256 lần file wave 8 bits mà nó có nghĩa là âm thanh được lượng tử hóa chính xác hơn, nghe trung thực hơn.

Trong mẫu Mono 8 bits, dữ liệu của subchunk “data” gồm chuỗi các giá trị 1 bytes. Với Stereo 8 bits, mỗi mẫu gồm 2 bytes, dữ liệu sẽ được sắp xếp xen kẻ (interleave), với byte đầu (byte chẳn) là mẫu âm thanh của kênh bên trái, byte sau (byte lẻ) là của kênh bên phải.

CẤU TRÚC FILE WAVE

 

Kích thước Giá trị
4 bytes “RIFF”
4 bytes Kích thước file RIFF
4 bytes “WAVE”
4 bytes “fmt “
4 bytes Kích thước subchunk “fmt “
2 bytes Kiểu mã hóa dữ liệu của file wave (thường là PCM)
2 bytes Số kênh: 1 – mono; 2 – stereo
4 bytes Số mẫu/1giây
4 bytes Số bytes/1 giây
2 bytes Số bytes/1mẫu
2 bytes Số bits/1mẫu
4 bytes “data”
4 bytes Kích thước dữ liệu
 Dữ liệu sóng âm

  1. Một số thuật toán sử dụng trong chương trình

 

  1. Giải thuật kiểm tra có phải khoảng lặng không :

 

  1. Lấy một frame âm thanh.
  2. Tính trung bình bình phương năng lượng của các mẫu âm thanh.
  3. Nếu

Năng lượng trung bình của Frame đó nhỏ hơn so với ngưỡng đã chọn

thì

     {

     _Tăng số frame lặng liên tiếp trong khoảng này lên một.

     _Kiểm tra số frame trong khoảng này đã vượt quá số frame cần thiết để khẳng định đó là khoảng lặng chưa.

      _Nếu thoả mãn thì khẳng định đây là khoảng lặng.

      _Nếu không thì trở về hàm gọi nó.

}

  1. Nếu

Năng lượng trung bình của Frame này lớn hơn ngưỡng đã chọn

thì

Khẳng định đây là tín hiệu thuộc một từ nào đó.

 

 

  1. Giải thuật tách các từ từ một câu dài :

  1. Tách một frame âm thanh từ buffer ra.

  1. 2. Nếu

Đó không là một frame của khoảng lặng

    Thì

{

    Nếu

chưa đánh dấu bắt đầu từ mới

    thì

Đánh dấu đây là điểm bắt đầu của một từ mới

    Copy tiếp Frame âm thanh đang xét vào Buffer của từ đang chuẩn bị ghi.

              Đặt con trỏ sang frame tiếp theo.

}

  1. 3. Không Thì // Đây là chỗ kết thúc một từ

{

    Đánh dấu vừa kết thúc một từ mới.

    Ghi dữ liệu trong Buffer đang chứa từ cần ghi ra một file tạm.

    Đặt con trỏ sang frame kế tiếp.

}

 

3.Giải thuật tổng hợp các từ :

 

  1. Lấy các từ đã được ghi âm trong một thư mục định trước theo một thứ tự định tổng hợp.
  2. Đọc file wave chứa từ đó, bỏ qua phần header, đưa vào bộ đệm đã chuẩn bị trước đó, cập nhật con trỏ trong bộ đệm.
  3. Tạo một Header cho file wave mới.
  4. Ghi vào file wave: Header + Dữ liệu trong Buffer.

 

 

 

  • Chức năng chính của chương trình :

Chương trình được thiết kế và cài đặt trên môi trường Visual C++.

Các chức năng chính của chương trình :

          + Ghi trực tiếp các từ từ mic vào file wave (Record)

          + Tổng hợp các từ từ file wave thành câu (Synthesis)

          + Hiển thị câu tổng hợp được ra thiết bị âm thanh (Play)

Xác định Xử lý tiếng nói bằng phương pháp xử lý đồng hình

Phần A: Trình bày lý thuyết

1.Các đặc tính cơ bản về tiếng nói

    Tiếng nói mà con người giao tiếp hằng ngày có bản chất là sóng âm thanh lan truyền trong không khí. Sóng âm trong không khí là sóng dọc do sự giản nở của không khí.Tín hiệu âm thanh tiếng nói là tín hiệu biến thiên liên tục về thời gian. Dải tần mà tai người có thể nghe được khá rộng, từ 20 đến 20.000Hz, là do đặc tính sinh lý qui định. Tín hiệu tiếng nói có độ dư thừa lớn do môi trường có nhiễu.Thực tế thì trong miền tần số 300 đến 3400Hz tiếng nói nghe được khá rõ, đây cũng chính dãi tần được người ta dùng trong điện thoại. Tín hiệu tiếng nói được tạo thành từ chuỗi các âm vị liên tiếp. Các âm vị này và các dạng chuyển đổi của chúng được xem như các ký hiệu biễu diễn thông tin. Sự sắp xếp những âm vị này được chi phối bởi các qui luật ngôn ngữ, cho nên các mô hình toán học khi được áp dụng đều phải gắn bó mật thiết với việc nghiên cứu các qui luật này.

1.1. Đặc tính vật lý của âm thanh

 

  1. Độ cao.

   Độ cao hay còn gọi là độ trầm bổng của âm thanh. Độ trầm bổng của âm thanh phụ thuộc vào sự chuyển động nhanh hay chậm của các phần tử không khí trong một đơn vị thời gian. Nói cách khác, độ cao phụ thuộc vào tần số dao động. Đối với tiếng nói, tần số dao động của đôi dây thanh qui định độ cao giọng nói của con người và mỗi người có một độ cao giọng nói khác nhau.

  1. Cường độ.

   Cường độ chính là độ to nhỏ của âm thanh, cường độ càng lớn thì âm thanh truyền đi càng xa trong môi trường có nhiễu. Cường độ của sóng tiếng nói do biên độ dao động của sóng qui định. Trong tiếng nói, cường độ của nguyên âm thường lớn hơn phụ âm nên tai người nghe nguyên âm dễ hơn.

  1. Độ dài.

   Độ dài của âm phụ thuộc vào sự chấn động lâu hay mau của các phần tử không khí. Cùng một âm nhưng trong các từ khác nhau thì độ dài khác nhau.

  1. Âm sắc

   Âm sắc là sắc thái riêng của một âm, cùng một nội dung, cùng một độ cao nhưng mỗi người nói có âm sắc khác nhau.

1.2. Đặc tính âm học của âm thanh

   Tín hiệu tiếng nói là tín hiệu tương tự biễu diễn thông tin về mặt ngôn ngữ và được mô tả bởi các âm vị khác nhau. Mỗi ngôn ngữ có số lượng các âm vị khác nhau, thông thường cỡ 20-30 và bé hơn 50 cho mọi ngôn ngữ. Các âm vị được chia làm hai loại chính là nguyên âm và phụ âm.

   Tổ hợp các âm vị tạo nên âm tiết. Âm tiết đóng vai trò một từ trọn vẹn mang ngữ nghĩa.

  1. Nguyên âm

   Nguyên âm được tạo ra bằng sự cộng hưởng của dây thanh khi dòng khí được thanh môn đẩy lên. Khoang miệng được tạo lập thành nhiều hình dạng nhất định tạo thành các nguyên âm khác nhau. Số lượng các nguyên âm phụ thuộc vào từng ngôn ngữ nhất định. Mỗi nguyên âm được đặc trưng bởi ba formant đầu.

  1. Phụ âm

   Phụ âm được tạo ra bởi các dòng khí hỗn loạn được phát ra gần những điểm co thắt của đường dẫn âm thanh do cách phát âm tạo thành. Dòng không khí tại chổ đóng của vòm miệng tạo ra phụ âm tắc. Những phụ âm xát được phát ra từ chỗ co thắt lớn nhất và các âm tắc xát tạo ra từ khoảng giữa. Phụ âm có đặc tính hữu thanh và vô thanh tuỳ thuộc vào dây thanh có dao động để tạo thành cộng hưởng không. Đặc tính của phụ âm tuỳ thuộc vào tính chu kỳ của dạng sóng, phổ tần số, thời gian tồn tại và sự truyền dẩn âm.

  1. Tỷ suất thời gian

   Trong khi nói chuyện, khoảng nói chuyện và khoảng nghỉ xen kẻ nhau. Tỷ số thời gian nói và nghỉ gọi là tỷ suất thời gian.

  1. Hàm năng lượng thời gian ngắn

   Hàm năng lượng thời gian ngắn được tính bằng cách chia tín hiệu tiếng nói thành nhiều khung chứa N mẫu và tính diện tích trung bình tổng các mẫu tín hiệu trong mỗi khung. Các khung này được đưa qua một cửa sổ có dạng hàm như sau:

                                                                                                                                                           W(n)        với   0£  n £ N                                                                            W(n)=

                                               0              với    n > N

    Hàm năng lượng ngắn được tính theo công thức sau:

               Em=S{x(n+m)* W(n)}2 ,   n=0,1,2,…,N-1.

Thông thường có ba dạng cửa sổ được dùng là cửa sổ Hamming, cửa sổ Hanning và cửa sổ chử nhật.

                                                   1      Với 0£ n £ N

              Dạng chữ nhật:    W(n)= {

                                                    0     với n >N.

                                                    0.54-0.46cos (n)      Với 0£ n £ N

              Dạng Hammming:  W(n)= {

                                                    0     với n >N.

                                                    0.5-0.5cos (n)      Với 0£ n £ N

              Dạng Hannming:  W(n)= {

                                                    0     với n >N.

Hàm năng lượng thời gian ngắn của âm hữu thanh thường lớn hơn âm vô thanh.

    e.Tần số vượt qua điểm không

    Tần suất vượt qua điểm không là số lần biên độ tín hiệu tiếng nói vượt qua giá trị không trong khoảng thời gian cho trước. Thông thường giá trị này của âm vô thanh lớn hơn âm hữu thanh do đặc tính ngẫu nhiên của âm vô thanh. Đặc điểm này cũng được ứng dụng trong quá trình tiền xử lý trong nhân dạng tiếng nói tự động.

    f.Phát hiện điểm cuối

    Trong xử lý tiếng nói việc xác định khi nào bắt đầu xuất hiện tín hiệu tiếng nói và khi nào kết thúc quá trình nói rất cần thiết và quan trọng. Có nhiều phương pháp, ví dụ như phương pháp sau:

   Lấy một mẫu nhỏ của nền nhiễu trong khoảng thời gian yên lặng trước khi nói. Dùng hàm năng lượng thời gian ngắn để tính năng lượng cho mẫu. ngưỡng của tiếng nói được chọn là giá trị giữa năng lượng yên tĩnh và năng lượng đỉnh. Ban đầu giả thiết điểm cuối xuất hiện tại điểm năng lượng tín hiệu vượt quá ngưỡng. Để tính đúng ước lượng này, người ta giả thiết và so sánh chúng với giá trị đó trong vùng yên tĩnh. Khi những thay đổi phát hiện được trong khi tính toán tần suất trên ở ngoài ngưỡng giả thiết thì điểm cuối được giả thiết lại tại điểm mà sự thay đổi xảy ra.

    g.Tần số cơ bản

    Dạng sóng của tiếng nói gồm hai phần: Phần giống nhiễu trong đó biên độ biến đổi ngẫu nhiên và phần có tính chu kỳ trong đó tín hiệu lặp lại gần như tuần hoàn. Phần  tín hiệu có tính chu kỳ chứa các thành phần tần số có dạng điều hoà. Tần số thấp nhất chính là tần số cơ bản và cũng chính là tần số dao động của thanh môn. Đối với người nói khác nhau, tần số cơ bản cũng khác nhau. Bảng sau cho biết tần số cơ bản của giới tính và tuổi:

Tần số cơ bản Người nói
 80   – 200 Hz Đàn ông
150 ­­-  450 Hz Phụ nữ
200 –  600 Hz Trẻ em

Đối với hai âm có cùng cường độ, độ cao, sẽ được phân biệt bởi tính tuần hoàn. Một âm hữu thanh có tính tuần hoàn khi phân tích phổ sẽ xuất hiện một vạch tại vùng tần số rất thấp. Vạch này đặc trưng cho tần số cơ bản của âm. Trong hội thoại tần số cơ bản thay đổi liên tục.

   h.Formant

   Trong phổ tần số của tín hiệu tiếng nói, mỗi đỉnh có biên độ cao nhất xét trong một khoảng nào đó( cực đại khu vực ) xác định một formant. Ngoài tần số, formant còn được xác định cả biên độ và dải thông của chúng. Về mặt vật lý các tần số formant tương ứng với các tần số cộng hưởng của tuyến âm. Trong xử lý tiếng nói đặc biệt là trong tổng hợp tiếng nói, để mô phỏng lại tuyến âm người ta phải xác định được các tham số formant đối với từng loại âm vị, do đó việc đánh giá ước lượng các formant có ý nghĩa rất quan trọng.

   Tần số formant biến đổi trong một dải rộng phụ thuộc vào giới tính người nói và đối với từng âm vị. Đồng thời formant còn phụ thuộc vào các âm vị trước và sau nó. Thông thường phổ tần số tiếng nói chứa khoảng 6 formant  nhưng ảnh hưởng lớn nhất đến đặc tính của âm vị là 3 formant đầu tiên.

    Tần số formant đặc trưng cho nguyên âm biến đổi tuỳ thuộc vào người nói trong điều kiện phát âm nhất định. Mặc dù phạm vi tần số formant của các nguyên âm có thể trùng lên nhau nhưng vị trí giữa các formant đó không đổi vì sự xê dịch của các formant là song song.

2.Xử lý tín hiệu tiếng nói.

    Kỷ thuật phân tích tiếng nói có thể được phân lớp vào miền tần số và miền thời gian. Mục đích chính trong phân tích tiếng nói là đánh giá đáp ứng tần số của bộ máy phát âm( tuyến âm ). Mục đích chính của phân tích tiếng nói là đánh giá đáp ứng tần số của tuyến âm. Các kỷ thuật xử lý tín hiệu tiếng nói thông thường là dùng dãy các bộ lọc, phân tích Fourier, xử lý homomorphic( đồng hình ) hoặc cepstral( phổ).

    Khái niệm ‘ short-time analysis ’( phân tích thời gian ngắn ) là cơ sở cho hầu hết các kỹ thuật phân tích tiếng nói. Giả sử rằng trong khoảng thời gian dài tín hiệu tiếng nói là không dừng nhưng với khoảng thời gian đủ nhỏ( 10 – 30 ms ), có thể xem nó là dừng. Đây là lý do mà sự thay đổi phổ tín hiệu tiếng nói có liên hệ trực tiếp với sự chuyển động của hệ phát âm( môi, cổ họng,… ) và các ràng buộc ngữ cảnh, sinh lý khác. Vì vậy các hệ thống phân tích tiếng nói đều thực hiện trên cơ sở thời gian biến đổi, với các khung thời gian được chọn là 10 –30ms.

2.1 Sự biểu hiện và phân tích  tín hiệu tiếng nói

    Tiếng nói liên tục là tập hợp các âm thanh phức tạp mà chúng ta khó sản sinh nhân tạo. Tín hiệu tiếng nói thường được xem xét là các âm hữu thanh huặc các âm vô thanh. Trong tín hiệu tiếng nói bao gồm F0 và các thành phần được sản sinh bởi các dây thanh. Tuyến âm thay đổi các tín hiệu nguồn tạo nên Formant. Mỗi tần số Formant có một biên độ và dải thông và đôi khi khó có thể định nghĩa các tham số này một cách chính xác. Tần số cơ bản và tần số formant là những khái nệm quan trọng nhất trong trong tổng hợp và xử lý tiếng nói nói chung.

    Các âm vô thanh không có tần số cơ bản và có thể được xem là nhiễu trắng. Thì thầm là trường hợp đặc biệt của tiếng nói, khi thì thầm thì ở đó tiếng nói không có tần số cơ bản.

Tín hiệu tiếng nói của ba nguyên âm : (/a/, /i/, /u/). Với miền thời gian và miền tần số như trong hình 2.2.1

Hình 2.2.1 – Miền thời gian và tần số của ba nguyên âm /a/, /i/, /u/

Tần số trong cả ba trường hợp là 100 Hz, và tần số formant F1, F2, F3, của nguyên âm /a/ lần lượt là 600 Hz, 1000 Hz và 2500 Hz, Với nguyên âm /i/ lần lượt là 200 Hz, 2300 Hz và 3000 Hz. Và với /u/ là 300 Hz, 600 Hz và 2300 Hz.

    Tần số của âm thanh bình thường nằm trong khoảng 300Hz dến 3400 Hz. Vì vậy, để biểu diễu tín hiệu tiếng nói trong kênh điện thoại thì 3 formant đầu là đủ. Để chất lượng cao hơn tần số lấy mẫu phải nằm từ 10 kHz tới 20 kHz.

    Phương pháp thường sử dụng để mô tả tín hiệu tiếng nói là spectrogram ( ảnh phổ ) mà qua đó biểu diễn thời gian – tần số – biên độ của một tín hiệu. Khi đó miền có tần số cao hơn thì màu xám hơn. Phổ của nguyên âm và phụ âm cũng dễ dàng nhận thấy. Do vậy ảnh phổ là phương pháp biểu diễn hữu ích nhất để nghiên cứu tiếng nói.

Hinh 2.2.2 – Ảnh phổ biểu diễn miền thời gian của từ kaksi

Để xác định tần số cơ bản hay tần số pitch của tiếng nói, ta ví dụ dùng phương pháp có tên gọi phân tích cepstral. Sơ đồ khối phương pháp này như sau:

Phân tích Cepstral cung cấp phương pháp để tách riêng tuyến âm và nguồn kích thích.

Tín hiệu tiếng nói sau khi qua bộ lọc hiệu chỉnh( thực chất là bộ lọc thông cao):

             H(z)=1-a.z-1, a < 1  và thường được chọn cỡ 0.95 – 0.98.

Do đặc tính phổ của tín hiệu nguồn, âm hữu thanh năng lượng tập trung ở miền tần thấp có độ dốc phổ là 12dB/octave. Môi là bộ lọc thông cao có độ dóc của phổ cỡ 6dB/octave.

Để phổ bằng phẳng hơn cần bộ lọc hiệu chỉnh bù lại  12dB/octave – 6dB/octave, do đó người ta chon a=0.95 – 0.98.

Cửa sổ thường được chọn là cửa sổ Hamming nhằm giảm sai số phân tích phổ khi độ dài tín hiệu hữu hạn.

Qúa trình lấy log10|.| cho phổ đều hơn( không quá lớn hay quá bé).

2.2.Xử lý đồng hình_ Homomophism.

    Chúng ta đã biết rằng tín hiệu tiếng nói gồm ba thành phần, một dãy các xung mô tả các pitch, xung kích thích và đáp ứng xung của ống thanh. Trong miền thời gian, gọi s(n) là tín hiệu nguồn, e(n) là tín hiệu kích thích và h(n) biểu diễn đáp ứng xung của ống thanh.

                s(n)  =  e(n) * h(n).                        ( * : Nhân chập )

    Đặt S(w) là phổ của tín hiệu tiếng nói hữu thanh, E(w) là phổ của xung pitch( tần số cơ bản ) và H(w) là phổ của tuyến âm. Khi đó quan hệ giữa ba biên độ này có thể được biễu diễn như sau:

                    |X(w)| = |H(w)|x |P(w)|                                                     (1)

    Logarithm hoá hai vế ta được:

                 log{|X(w)|} = log{|H(w)|} +  log{|P(w)|}                                (2)

    Như vậy logarithm của |X(w)| là tổng logarithm của |H(w)| và |P(w)|. Hơn nữa  |H(w)| được quyết định bởi tuyến âm theo hướng tần số biến đổi chậm, trong khi đó phân bố |P(w)| có chu kỳ biến đổi nhanh hơn theo tần số. Điều này có nghĩa là hai thành phần này có thể phân tách nhau được nhờ toán tử lọc. Phép lọc này thông thường được thực hiện nhờ biến đổi ngược Fourier của log{|X(w)|}, cho ta cepstrum( phổ) của tín hiệu. Trong Cepstrum, chu kỳ pitch phân bố có tính chu kỳ, trong khi đó phân bố của tuyến âm xảy ra gần trục hoành hơn bởi vì nó biến đổi chậm hơn.

   Sơ đồ hệ thống đồng hình cho phân tích tiếng nói.

Inverse Discrete Fourier Transform

speech

 

                                                                                       Cepstrum window

       data Windows

 

                      Hình 1.Hệ thống đồng hình cho phân tích tiếng nói

    Hình 2 chỉ ra cửa sổ time-waveform, log-magnitude spectrum, cepstrum và cepstrally-smoothed spectrum cho một nguyên âm( ví dụ cho âm ‘a’), khoảng xét là 23.2ms(256 mẫu cho 11025Hz). Tính toán FFT cho các đoạn tín hiệu tiếng nói( 25.6 ms) và lấy logarithm cho ta log-magnitude specstrum như hình2_b , ở đây có thành phần biến đổi chậm do sự truyền dẫn tuyến âm và thành phần biến đổi nhanh có chu kỳ do pitch.Thành phần biến đổi chậm khi biến đổi Fourier ngược ta được phần biến đổi chậm theo thời gian gần trục hoành, hình2_c và những thành phần biến đổi nhanh là những đỉnh nhô cao có tính chu kỳ. Như hình2_c ta  nhận thấy chu kì pitch cỡ 4ms( < 50 mẫu). Để tính được đường bao phổ tuyến âm ta nhân nó với hàm cửa sổ, hàm này có dạng chữ nhật:

                        1                  n  <=  N1

            W[nT]=

          0                  n > N1

    với N1 = 4ms x 11Kz = 45 mẫu. Đường bao phổ của tuyến âm như hình2_d.

              Hình 2. Lọc đồng hình cho âm hữu thanh

    Dùng bộ lọc đồng hình áp dụng cho âm vô thanh cho ta đồ thị như hình3. Kích thích không có dạng tuần hoàn cho ta thành phần biến đổi nhanh ngẫu nhiên ở hình3_b.Vì thế đối với Cepstrum, hình3_c các phần biến đổi nhanh không còn có tính chu kỳ nữa, có nghĩa không thấy các đỉnh có biên độ lớn hơn hẳn nhô lên nữa.

    Rõ ràng,việc ‘cắt phổ’( vocal tract envelope) là phương pháp hữu ích để loại bỏ các ‘gợn pitch’ từ sơ đồ phổ có độ phân giải cao, để loại ra chỉ thông tin về hàm truyền dẫn tuyến âm. Do đó khi tiến hành phân tích ta phải thoả hiệp đối với việc tăng độ phân giải phổ(gây khó khăn khi quan sát) bằng cách, mổi cửa sổ thời gian tín hiệu tiếng nói được dùng phải chứa ít nhất hai chu kỳ pitch. Thông thường mỗi cửa sổ ta chọn cỡ 20-30ms.

               Hình 3.  Lọc đồng hình áp dụng cho âm vô thanh

2.3. Xác định tần số cơ bản F0 bằng phương pháp xử lý đồng hình.

Theo các kết quả khảo sát và nghiên cứu từ trước, tần số cơ bản:

               Giọng nam: 80  – 250 Hz

               Giọng nữ:   150 – 500 Hz

Sơ đồ khối xác định F0 như sau:

Một số phương pháp xác định F0:

  • Dựa vào hàm tự tương quan.
  • Dựa vào hàm vi sai biên độ trung bình.
  • Dùng bộ lọc đảo và hàm tự tương quan.
  • Xử lý đồng hình.

Đối với phương pháp xử lý đồng hình, ta thấy từ biểu thức(2.2):

                 x^(n)=s^(n)+u^(n)             (2.2)

ta tách thành phần s^(n) bằng cách nhân x^(n) với cửa sổ (chữ nhật chẳng hạn), biến đổi Fourier ta sẽ được phổ dexiben của nguồn.

Trong phổ dexiben của nguồn, đỉnh cao nhất và gần gốc nhất là tần số cơ bản F0.

Phần B. Chương trình.

1. Phân tích và thiết kế chức năng chương trình

    Chương trình được thiết kế gồm ba chức năng chính:

   ¨ Đọc file wave.

   ¨ Hiển thị file wave.

   ¨ Xử lý đồng hình.

     Sơ đồ khối mức đỉnh:

                                 Hình 4. Sơ đồ khối chức năng mức đỉnh.

    Trong chức năng xử lý đồng hình, ta phân rã thành hai chức năng con:

         + Xử lý

         + Hiển thị.

    Sơ đồ khối chức năng này như sau:

                                  Hình 5.  Sơ đồ khối xử lý đồng hình.

2. Thiết kế modun chương trình

    Với phân tích như trên, chương trình được thiết kế vào hai modun chính là:

         ¨ Modun Wave:

                                ° Đọc,thu/phát file wave.

                                ° Hiển thị file wave.

                                ° Biến đổi FFT.

                                ° Xử lý đồng hình  .

         ¨ Modun hiển thị:  Dùng để hiển thị tín hiệu.

3. Cài đặt

   Chương trình được cài đặt trên ngôn ngữ Visual C++ 6.0. Lớp chính là lớp Wave.

   Lớp CWave: Dùng các hàm thư viện API trên window để xử lý file wave. Các hàm sử dụng trong chương trình được liệt kê theo chỉ mục như sau:

Library: winmm.lib

    –  waveInGetDevCaps: Xem khả năng đưa âm thanh của thiết bị vào

    –  waveInGetNumDevs: Trả về số thiết bị vào âm thanh trên hệ thống.

    –  waveInOpen: Mở thiết bị ghi âm thanh.

    –  waveInGetErrorText: Đưa ra miêu tả lỗi đối với số lỗi tương ứng dưới dạng text

    –  waveInPrepareHeader: Chuẩn bị bộ đệm cho đầu vào âm thanh( Header).

    –  waveInReset function: Khởi tạo lại quá trình thu âm.

    –  waveInStart: Bắt đầu nhận âm thanh từ thiết bị vào( ghi âm).

    –  waveInStop: Dừng quá trình thu âm( kết thúc).

    –  waveInUnprepareHeader:Xoá các thao tác trong hàm waveInPrepareHeader function.Hàm này được gọi trước khi giải phóng bộ đệm ở quá trình ghi âm.

    –  waveOutClose: Đóng thiết bị phát âm thanh.

    –  waveOutOpen: Mở thiết bị phát âm thanh để phát( playback).

    –  waveOutPrepareHeader: Chuẩn bị dữ liệu audio để phát ( playback).

    –  waveOutReset: Dừng phát ra thiết bị và khởi tạo lại từ đầu. Bộ đệm dữ liệu được đánh dấu.

    – waveOutUnprepareHeader: Hàmnày được gọi sau khi trình điều khiển thiết bị kết thúc với khối dữ liệu được chuẩn bị ở waveOutPrepareHeader. Hàm này được gọi trước khi giải phóng bộ đệm.

    –  waveOutWrite: Hàm này đưa( ghi) dữ liệu ra thiết bị phát audio.

    –  waveOutGetDevCaps: Kiểm tra khả năng phát âm thanh của thiết bị phát.

    –  waveOutGetNumDevs: Trả về số thiết bị phát âm thanh trong hệ thống.

    –  waveOutGetErrorText: Đưa ra miêu tả lỗi đối với số lỗi tương ứng dưới dạng text.

    Dựa trên thư viện này, các hàm chính được viết trong chương trình được miêu tả dưới đây:

    ¨ /*

         Open wave file with file name is @strFileName and window receives wave

         out message is *pParent.

         Function return 0 if open succesfully. otherwise return -1

    */

      int CWave::OpenFile(LPCTSTR strFileName)

     ¨/*

         Play wave file

         Function return -1 if has an error appear and return 0 if no error

        */

         int CWave::Play(CWnd *pParent)

     ¨ /*

         Record wave file

         – Return 0 if no error

         – Return -1 if has error

         – Return 1 if user select cancel

       */

        int CWave::Record(CWnd *pParent)

     ¨/*

          Draw wave file signal to device context

        */

         void CWave::Draw(CDC* pDC,CRect &Vinculum)

     ¨/*

         Calculate and draw ceptrum transform and then get logarithm coef 10

        */

         void CWave::DrawLogCeptrum(CDC *pDC, CRect &Vinculum)

      ¨/*

      Calculate and draw time ceptrum transform

       */

       void CWave::DrawTimeCeptrum(CDC *pDC, CRect &Vinculum)

      ¨/*

         Calculate and draw cepstral envelope

       */

       void CWave::DrawEnvelopeCeptrum(CDC *pDC, CRect &Vinculum)

     ¨/*

         Fast Fourier Transform

         Input :x,y,n,inv: inv=0 -> FFT, inv !=0 ->IFFT

         Output :x,y

        */

         void FFT(double *x, double *y, int n, int inv)

        …

        và các hàm tiện ích khác

Tài liệu tham khảo

            1.Trịnh Văn Loan, Bài giảng xử lý tiếng nói

            2.F.J.Owens,  Signal Processing of Speech.

           3.http://www.codeguru.com

Biểu diễn năng lượng, biên độ, và tỉ lệ biến thiên qua giá trị không của tín hiệu tiếng nói theo thời gian

1.Các đặc tính cơ bản của tiếng nói

         Tiếng nói mà con người giao tiếp hằng ngày có bản chất là sóng âm thanh lan truyền trong không khí. Sóng âm trong không khí là sóng dọc do sự giản nở của không khí.Tín hiệu âm thanh tiếng nói là tín hiệu biến thiên liên tục về thời gian. Dải tần mà tai người có thể nghe được khá rộng, từ 20 đến 20.000Hz, là do đặc tính sinh lý qui định. Tín hiệu tiếng nói có độ dư thừa lớn do môi trường có nhiễu.Thực tế thì trong miền tần số 300 đến 3400Hz tiếng nói nghe được khá rõ, đây cũng chính dãi tần được người ta dùng trong điện thoại. Tín hiệu tiếng nói được tạo thành từ chuỗi các âm vị liên tiếp. Các âm vị này và các dạng chuyển đổi của chúng được xem như các ký hiệu biễu diễn thông tin. Sự sắp xếp những âm vị này được chi phối bởi các qui luật ngôn ngữ, cho nên các mô hình toán học khi được áp dụng đều phải gắn bó mật thiết với việc nghiên cứu các qui luật này.

1.1. Đặc tính vật lý của âm thanh

1.1.1. Độ cao

Độ cao hay còn gọi là độ trầm bổng của âm thanh. Độ trầm bổng của âm thanh phụ thuộc vào sự chuyển động nhanh hay chậm của các phần tử không khí trong một đơn vị thời gian. Nói cách khác, độ cao phụ thuộc vào tần số dao động. Đối với tiếng nói, tần số dao động của đôi dây thanh qui định độ cao giọng nói của con người và mỗi người có một độ cao giọng nói khác nhau.

1.1.2. Cường độ.

 Cường độ chính là độ to nhỏ của âm thanh, cường độ càng lớn thì âm thanh truyền đi càng xa trong môi trường có nhiễu. Cường độ của sóng tiếng nói do biên độ dao động của sóng qui định. Trong tiếng nói, cường độ của nguyên âm thường lớn hơn phụ âm nên tai người nghe nguyên âm dễ hơn.

1.1.3. Độ dài

 Độ dài của âm phụ thuộc vào sự chấn động lâu hay mau của các phần tử không khí. Cùng một âm nhưng trong các từ khác nhau thì độ dài khác nhau.

1.1.4. Âm sắc

 Âm sắc là sắc thái riêng của một âm, cùng một nội dung, cùng một độ cao nhưng mỗi người nói có âm sắc khác nhau.

1.2. Đặc tính âm học của âm thanh

   Tín hiệu tiếng nói là tín hiệu tương tự biễu diễn thông tin về mặt ngôn ngữ và được mô tả bởi các âm vị khác nhau. Mỗi ngôn ngữ có số lượng các âm vị khác nhau, thông thường cỡ 20-30 và bé hơn 50 cho mọi ngôn ngữ. Các âm vị được chia làm hai loại chính là nguyên âm và phụ âm.  Tổ hợp các âm vị tạo nên âm tiết. Âm tiết đóng vai trò một từ trọn vẹn mang ngữ nghĩa.

 1.2.1. Nguyên âm

          Nguyên âm được tạo ra bằng sự cộng hưởng của dây thanh khi dòng khí được thanh môn đẩy lên. Khoang miệng được tạo lập thành nhiều hình dạng nhất định tạo thành các nguyên âm khác nhau. Số lượng các nguyên âm phụ thuộc vào từng ngôn ngữ nhất định. Mỗi nguyên âm được đặc trưng bởi ba formant đầu.

 

 

1.2.2. Phụ âm

         Phụ âm được tạo ra bởi các dòng khí hỗn loạn được phát ra gần những điểm co thắt của đường dẫn âm thanh do cách phát âm tạo thành. Dòng không khí tại chổ đóng của vòm miệng tạo ra phụ âm tắc. Những phụ âm xát được phát ra từ chỗ co thắt lớn nhất và các âm tắc xát tạo ra từ khoảng giữa. Phụ âm có đặc tính hữu thanh và vô thanh tuỳ thuộc vào dây thanh có dao động để tạo thành cộng hưởng không. Đặc tính của phụ âm tuỳ thuộc vào tính chu kỳ của dạng sóng, phổ tần số, thời gian tồn tại và sự truyền dẩn âm.

1.2.3. Tỷ suất thời gian

         Trong khi nói chuyện, khoảng nói chuyện và khoảng nghỉ xen kẻ nhau. Tỷ số thời gian nói và nghỉ gọi là tỷ suất thời gian.

1.2.4. Hàm năng lượng thời gian ngắn

          Hàm năng lượng thời gian ngắn được tính bằng cách chia tín hiệu tiếng nói thành nhiều khung chứa N mẫu và tính diện tích trung bình tổng các mẫu tín hiệu trong mỗi khung. Các khung này được đưa qua một cửa sổ có dạng hàm như sau:

                                                                                                                                                                           W(n)        với   0£  n £ N                                                                                                                      W(n)=

              0              với    n > N

    Hàm năng lượng ngắn được tính theo công thức sau:

               Em=S{x(n+m)* W(n)}2 ,   n=0,1,2,…,N-1.

Thông thường có ba dạng cửa sổ được dùng là cửa sổ Hamming, cửa sổ Hanning và cửa sổ chử nhật.

                                                             1      Với 0£ n £ N

              Dạng chữ nhật:    W(n)= {

                                                              0     với n >N.

                                                              0.54-0.46cos (n)      Với 0£ n £ N

              Dạng Hammming:  W(n)= {

                                                              0     với n >N.

                                                              0.5-0.5cos (n)      Với 0£ n £ N

              Dạng Hannming:  W(n)= {

                                                              0     với n >N.

Hàm năng lượng thời gian ngắn của âm hữu thanh thường lớn hơn âm vô thanh.

 1.2.5, Tỉ lệ biến thiên qua điểm không.

         Tỉ lệ biến thiên qua điểm không là số lần biên độ tín hiệu tiếng nói vượt qua giá trị không trong khoảng thời gian cho trước. Thông thường giá trị này của âm vô thanh lớn hơn âm hữu thanh do đặc tính ngẫu nhiên của âm vô thanh. Đặc điểm này cũng được ứng dụng trong quá trình tiền xử lý trong nhân dạng tiếng nói tự động.

 

 1.2.6. Phát hiện điểm cuối

             Trong xử lý tiếng nói việc xác định khi nào bắt đầu xuất hiện tín hiệu tiếng nói và khi nào kết thúc quá trình nói rất cần thiết và quan trọng. Có nhiều phương pháp, ví dụ như phương pháp sau:

   Lấy một mẫu nhỏ của nền nhiễu trong khoảng thời gian yên lặng trước khi nói. Dùng hàm năng lượng thời gian ngắn để tính năng lượng cho mẫu. ngưỡng của tiếng nói được chọn là giá trị giữa năng lượng yên tĩnh và năng lượng đỉnh. Ban đầu giả thiết điểm cuối xuất hiện tại điểm năng lượng tín hiệu vượt quá ngưỡng. Để tính đúng ước lượng này, người ta giả thiết và so sánh chúng với giá trị đó trong vùng yên tĩnh. Khi những thay đổi phát hiện được trong khi tính toán tần suất trên ở ngoài ngưỡng giả thiết thì điểm cuối được giả thiết lại tại điểm mà sự thay đổi xảy ra.

1.2.7. Tần số cơ bản   

          Dạng sóng của tiếng nói gồm hai phần: Phần giống nhiễu trong đó biên độ biến đổi ngẫu nhiên và phần có tính chu kỳ trong đó tín hiệu lặp lại gần như tuần hoàn. Phần  tín hiệu có tính chu kỳ chứa các thành phần tần số có dạng điều hoà. Tần số thấp nhất chính là tần số cơ bản và cũng chính là tần số dao động của thanh môn. Đối với người nói khác nhau, tần số cơ bản cũng khác nhau. Bảng sau cho biết tần số cơ bản của giới tính và tuổi:

Tần số cơ bản Người nói
 80   – 200 Hz Đàn ông
150 ­­-  450 Hz Phụ nữ
200 –  600 Hz Trẻ em

         Đối với hai âm có cùng cường độ, độ cao, sẽ được phân biệt bởi tính tuần hoàn. Một âm hữu thanh có tính tuần hoàn khi phân tích phổ sẽ xuất hiện một vạch tại vùng tần số rất thấp. Vạch này đặc trưng cho tần số cơ bản của âm. Trong hội thoại tần số cơ bản thay đổi liên tục.

 1.2.8. Formant

          Trong phổ tần số của tín hiệu tiếng nói, mỗi đỉnh có biên độ cao nhất xét trong một khoảng nào đó( cực đại khu vực ) xác định một formant. Ngoài tần số, formant còn được xác định cả biên độ và dải thông của chúng. Về mặt vật lý các tần số formant tương ứng với các tần số cộng hưởng của tuyến âm. Trong xử lý tiếng nói đặc biệt là trong tổng hợp tiếng nói, để mô phỏng lại tuyến âm người ta phải xác định được các tham số formant đối với từng loại âm vị, do đó việc đánh giá ước lượng các formant có ý nghĩa rất quan trọng.

         Tần số formant biến đổi trong một dải rộng phụ thuộc vào giới tính người nói và đối với từng âm vị. Đồng thời formant còn phụ thuộc vào các âm vị trước và sau nó. Thông thường phổ tần số tiếng nói chứa khoảng 6 formant  nhưng ảnh hưởng lớn nhất đến đặc tính của âm vị là 3 formant đầu tiên.

         Tần số formant đặc trưng cho nguyên âm biến đổi tuỳ thuộc vào người nói trong điều kiện phát âm nhất định. Mặc dù phạm vi tần số formant của các nguyên âm có thể trùng lên nhau nhưng vị trí giữa các formant đó không đổi vì sự xê dịch của các formant là song song.

  1. Cấu trúc file wave.

2.1. Khái niệm về tập tin Wav

          Tập tin wave là một dạng tập tin dùng để lưu trữ dữ liệu âm thanh số (dạng sóng)và nó là một trong những định dạng phổ biến nhất của hệ điều hành Windows.Tập tin wave thuộc chuẩn RIFF ( Resource Interchange File Format- dạng tập tin tài nguyên có thể trao đổi) và đặc điểm của những tập tin thuộc chuẩn RIFF đó là nó sẽ nhóm nội dung của tập tin thành các khối riêng biệt và mỗi một khối sẽ gồm một header (dùng để qui định kiểu và kích thước của khối ) và các byte dữ liệu.
2.2. Cấu trúc tập tin wave.

Cấu trúc file wave gồm 3 khối: khối mô tả dạng RIFF,khối thuộc tính “fmt “ và khối dữ liệu “data” trong đó khối thuộc tính “fmt” và khối dữ liệu “data” là 2 khối con của khối mô tả dạng RIFF.

  1. Khối mô tả dạng RIFF:
    Khối này xác định dạng RIFF và có kích thước là 12 byte gồm các trường:

+ ChunkID:
­            Kích thước: 4 byte
­            Chức năng: chứa chuỗi “RIFF” dưới dạng mã ASCII
+ ChunkSize:
­            Kích thước: 4 byte
­            Chức năng: cho biết tổng kích thước của các trường sau nó.
(ChunkSize=4+(8+Subchunk1Size)+(8+Subchunk2Size))
+ Format:
­            Kích thước: 4 byte
­            Chức năng: chứa chuỗi “WAVE”.

  1. Khối thuộc tính “fmt ”:

Khối này xác định các thuộc tính của dữ liệu âm thanh và có kích thước là 24 byte gồm các trường:
+ Subchunk1ID:
­                        Kích thước: 4 byte
Chứa chuỗi “fmt ”.
+ Subchunk1Size:
­                          Kích thước: 4 byte
­                          Chức năng:cho biết tổng kích thước của các trường thuộc khối thuộc tính đứng phía sau trường này.(đối với tập tin wave không nén thì Subchunk1Size bằng 16)
+ AudioFormat:
­                          Kích thước: 2 byte
­                          Chức năng: cho ta biết dạng nén của dữ liệu trong tập tin wave.
Một số giá trị thông dụng

0   : Không xác định
1   :  Không nén (PCM-Pulse Code Modulation)
80 : MPEG
49 : GSM 6.10
17 : IMA ADPCM

+ NumChannels:
­                          Kích thước: 2 byte
­                          Chức năng: cho biết số kênh của tập tin wave.
(Mono=1,Stereo=2,v.v)
+ SampleRate:
­                           Kích thước: 4 byte
­                           Chức năng: cho biết số mẫu trên 1 s và đây chính là tần số lấy mẫu của file wav
+ ByteRate:
­                           Kích thước: 4 byte
­                         Chức năng:cho biết số byte trên 1 s ứng với tần số lấy mẫu trên.
(ByteRate=SampleRate*NumChannels*(BitsperSample/8))
+ BlockAlign:
­                        Kích thước:2 byte
­                        Chức năng: cho biết số byte của 1 mẫu gồm tất cả các kênh.
+ BitsPerSample: cho biết số bit trên 1 mẫu chỉ tính cho 1 kênh.
( 8 bit=8,16 bit=16,v.v)

  1. Khối dữ liệu “data”:
    + Subchunk2ID:
    ­                        Kích thước: 4 byte
    ­                        Chức năng: chứa chuỗi “data”.
    + Subchunk2Size:
    ­                        Kích thước:4 byte
    ­                        Chức năng: cho biết kích thước của dữ liệu âm thanh thô trong trường data.
    (Subchunk2Size=NumSamples*NumChannels*BitsperSample/8)
    + Data: trường data chứa các byte dữ liệu âm thanh và các byte dữ liệu này sẽ nhóm thành các mẫu,mỗi mẫu có 1 hoặc 2 kênh.Tùy vào số kênh của một mẫu(xác định bởi trường NumChannels) và số bit trên 1 kênh (xác định bởi trường BitsPerSample) mà ta sẽ xác định được số byte của 1 mẫu.

 

Hệ phân tán (phần 3)

PHẦN IV

TRUYỀN THÔNG

Các thành phần của một hệ phân tán là độc lập về mặt logic và mặt vật lí: Các thành phần này truyền thông trong một thứ tự tương tác. Các hệ phân tán và các ứng dụng được soạn của các thành phần phần mềm riêng biệt mà nó tương tác lẫn nhau trong một thứ tự để thực hiện những tác vụ. Các thành phần phần mềm này yêu cầu hoặc cung cấp các truy cập tài nguyên trong các hệ phân tán được thực hiện như các tiến trình. Đây là mô hình khách-chủ hiện thực đã được phác thảo trong chương I: Mô hình hướng đối tượng được định nghĩa cũng có thể được thực hiện trong một kiểu mẫu. Trong hệ thống khách-chủ một tiến trình máy khách phải tương tác với 4 tiến trình máy phục vụ bất cứ khi nào nó yêu cầu truy cập tới một tài nguyên mà nó không điều khiển phần cứng, phần mềm hoặc dữ liệu.

Truyền thông giữa một cặp tiến trình bao gồm các thao tác trong các gửi và nhận cùng kết quả trong:

  1. Truyền dữ lkiệu từ môi trường tiến trình gửi sang môi trường tiến trình nhận.
  2. Trong một vài thao tác, sự đồng bộ hóa việc nhận và gửi hoạt động, vì vậy gửi và nhận các tiến trình là bị ngăn cách tiếp tục cho đến khi các tiến trình khác tạo ra một hoạt động.

Theo (a) ta thấy các tiến trình truyền thông phải chia sẻ một kênh truyền thông – một phương tiện cho dữ liệu được truyền giữa các tiến trình này nhưng ngược lại theo (b) là ngầm ẩn đi trong thao tác của tất cả các phần gốc lập trình để truyền thông.

Các kiến trúc lập trình cơ bản tạo ra một kiểu mẫu của các phần gốc lập trình để gửi và nhận. Các phần gốc lập trình này thực hiện các hoạt động ‘massage-pasing‘(chuyển thông điệp) giữa một cặp tiến trình. Mỗi hoạt động ‘massage-passing’  bao gồm truyền thông tin khi gửi các tiến trình của một tập các giá trị dữ liệu (một thông báo), cho dù một cơ chế truyền thông đã xác định (một kênh hoặc một cổng) và được sự chấp nhận khi các tiến trình gửi đi của thông điệp. Cơ chế này có thể được đồng bộ hoặc là được giới hạn, nghĩa là người gửi chờ đợi sau khi truyền một thông điệp cho đến khi người nhận thực hiện một thao tác nhận hoặc nó có thể không đồng bộ hoặc không giới hạn, nghĩa là thông điệp bị thay thế trong một hàng đợi, các thông điệp chờ người nhận chấp nhận nó và các tiến trình gửi đi có thể xử lí ngay tức khắc. Thông thường, nhận làm hạn chế các tiến trình nhận khi không có một thông báo nào hiện thời có sẵn.

Thực hiện thiết thực hoạt động chuyển thông báo giữa các tiến trình định vị trong các máy tính khác nhau, yêu cầu sử dụng một mạng truyền thông cho sự truyền dữ liệu và sự truyền thông các tín hiệu đồng bộ.

Các hệ phân tán có thể được thiết kế toàn bộ trong giới hạn của masage-passing, nhưng có các kiểu mẫu chắc chắn truyền thông xuất hiện thường xuyên và hữu ích, nó có thể được chú ý như là một phần cần thiết cho việc hỗ trợ để thiết kế và xây dựng hệ phân tán.

Việc thực hiện các hệ phân tán phụ thuộc vào việc thực hiện của các hệ thống nguồn truyền thông, sử dụng truyền thông liên tiến trình. Các hệ phân tán thực hiện mức cao yêu cầu các việc thực hiện  của các kiểu mẫu truyền thông. Trong đặc trưng, phần mềm thực hiện nó thực hiện các kiểu mẫu này nếu truyền thông có một tác động tới hạn trên gốc trễ của truyền thông liên tiến trình.

 

  1. Truyền thông khách-chủ

 Mô hình truyền thông khách chủ được định theo hướng dự phòng dịch vụ. Một thay đổi bao gồm:

Truyền một yêu cầu từ một tiến trình máy khách sang một tiến trình máy phục vụ

Máy phục vụ thi hành các yêu cầu.

Truyền một phúc đáp tới máy khách.

                        Cilent                                                 Server

                                                1.Request

                    (blocked)                                                      2.Processing

                                                   2.Reply

                                    Hình 2.1 Cilent-server Communication

Các kiểu mẫu truyền thông này bao gồm truyền hai thông điệp (hình 2.1) và một kiểu định rõ của sự đồng bộ hóa máy khách và máy phục vụ. Các tiến trình máy phục vụ phải nhận ra thông điệp yêu cầu đã gửi trong bước 1 ngay khi nó đến, và sự đưa ra các yêu cầu trong tiến trình máy khách phải chặn lại.

Kiểu khách-chủ của sự truyền thông có thể được thực hiện trong các kiểu dáng của các thao tác chuyển thông báo cơ sở, gửi và nhận đã phác thảo ở trên, nhưng thông thường nó thay mặt ở cấp độ ngôn ngữ như là một kiến trúc gọi thủ tục từ xa (RPC) che giấu các thao tác truyền thông phía sau sự trừu tượng hóa gọi thủ tục giống nhau và được hiện trong trong các kiểu dáng của một giao thức yêu cầu – phúc đáp cho các thao tác truyền thông được đánh giá lạc quan cho mục đích quản lý.

Trong suốt  thời gian tồn tại, một tiến trình máy phục vụ phục vụ nhiều máy khách, nó cần có một nhận thức không ưu tiên của nó. Mỗi yêu cầu chứa một từ  định danh  truyền thông mà nó được dùng.

  1. Chức năng shipping

Trong kiểu mẫu truyền thông khách-chủ nội dung của thông điệp được chuyển giữa máy khách và máy phục vụ là dữ liệu tinh khiết, thậm chí một phần của thông điệp đầu tiên chỉ định hoạt động (thủ tục) mà máy phục vụ phải thi hành toàn bộ yêu cầu đó. Một mở rộng của mô hình này cho phép chức năng shipping, các định nghĩa thủ tục trong chức năng shipping là: Sự chỉ dẫn để hợp các thủ tục lại được thông qua từ máy khách đến máy phục vụ. Trong mô hình chức năng shipping, máy phục vụ hoạt động như một môi trường thực hiện và các bộ thông dịch cho các chương trình trong một số ngôn ngữ xác định, và các máy khách truyền chuỗi các chỉ dẫn cho sự thông dịch . Một vài chuỗi chỉ dẫn là các định nghĩa của thủ tục đặt tên được lưu trữ bởi máy phục vụ để cho các hoạt động sau đó là các lời gọi thủ tục,  yêu cầu các thủ tục phải được gửi trước đến các máy phục vụ hoặc gắn liền các thủ tục với bộ thông dịch máy phục vụ.

 Phương pháp giải quyết này rất linh động, nó cho phép máy khách mở rộng số lượng hoạt động mà nó có thể thể hiện trong các máy phục vụ. Nhưng nó phải được thực hiện trong giới hạn một ngôn ngữ lập trình xác định được thông dịch bởi máy phục vụ, và máy khách phải tạo ra các yêu cầu  bằng ngôn ngữ này.

Môi trường các chương trình được dịch trên các máy chủ yêu cầu thiết kế đảm bảo để chắc chắn rằng, sự tương tác giữa các máy khách là hoàn toàn kiểm soát được. Bởi vì các giới hạn này, có rất nhiều ví dụ về các chương trình ứng dụng thực tế dùng chức năng shipping, nhưng chỉ có một sự thành công nổi bật : Đó là sự hữu ích của ngôn ngữ Postcsript để truyền thông với các máy in laser và các hệ thống Window, phương pháp giải quyết này được sử dụng trong một phạm vi rộng của máy in laser nhưng nó đã xuất hiện cho đến ngày nay chỉ trong hai hệ thống The Sun News Window System (Sun 1987) và Next Step System của Netcomputer.

Trong một hệ thống mở, các máy khách không thể khởi tạo để nắm giữ các định danh truyền thông của tất cả các tiến trình máy phục vụ, các tiến trình máy phục vụ chỉ quản lý các tài nguyên mà nó có thể sử dụng. Thông thường khi một tiến trình máy phục vụ khởi động nó tự ghi chính nó vào một dịch vụ tên, chỉ ra địa chỉ mạng của nó và một cái tên phổ biến cho dịch vụ mà nó cung cấp. Các máy khách lấy được địa chỉ mạng bằng cách thăm dò dịch vụ tên sử dụng các tên dịch vụ phổ biến giống nhau và vì có thể truyền thông được với máy phục vụ. Nên nhớ rằng một tiến trình là một máy khách hoặc một máy phục vụ cho các mục đích trao đổi đặc biệt hoặc một loạt các trao đổi. Một máy phục vụ có thể yêu cầu dịch vụ này của một máy phục vụ khác và vì vậy có thể là một máy khách, đối với tiến trình khác tương tự như vậy một máy khách có thể là một máy phục vụ đối với một tiến trình khác .

III. Nhóm đa phân phối

Trong mô hình truyền thông, nhóm đa phân phối các tiến trình tương tác lẫn nhau bằng thông điệp, nhưng trong trường hợp này đích đến của một thông điệp không phải là một tiến trình đơn mà là một nhóm các tiến trình. Đối với một nhóm đơn gửi các thao tác, có một chương trình nhận tương ứng được thể hiện bởi mỗi thành viên của một nhóm các tiến trình, gửi một thông điệp đến các thành viên của một nhóm xác định các tiến trình được hiểu là đa phân phối (thuật ngữ quảng bá được sử dụng trong cuốn sách này chỉ đề cập đến tính năng gửi thông điệp đến tất cả các máy tính trong môi trường mạng có sẵn – một kỹ thuật thường được sử dụng trong các mạng cục bộ nhưng không có phạm vi lớn và bởi vậy nó được sử dụng một cách dè xẻn trong các hệ phân tán).

Truyền thông nhóm đa phân phối có thể được minh họa bởi các ví dụ sau:

Định vị một đối tượng: Một máy khách đa phân phối một thông điệp bao gồm tên của  thư mục file đến một nhóm file của các tiến trình máy phục vu, chỉ có một tiến trình trả lời đó là tiến trình nắm giữ thư mục thích hợp .

Tính chịu lỗi: Một máy khách đa phân phối các yêu cầu của nó đến một nhóm các tiến trình máy phục vu. Tất cả các tiến trình xử lý các yêu cầu một cách xác định và có một hoặc nhiều các tiến trình trả lời. Một nhóm 2 hoặc nhiều máy phục vụ có thể tiếp tục cung cấp cho dịch vụ thậm chí nếu một trong số các máy này bị lỗi.

Cập nhật nhiều (phức tạp) : Một sự kiện như  thời gian là 18:01’ có thể đa phân phối đến một nhóm các tiến trình quan tâm.

Có thể có hoặc không sự cung cấp phần cứng cho truyền thông đa phân phối trong mạng dưới đây, không có sự hỗ trợ này, một tin nhắn đa phân phối phải gửi liên tiếp bởi hệ truyền thông đến các thành viên của một nhóm tiến trình : Nó có thể được gửi song song. Quan trọng của truyền thông với các nhóm tiến trình là khi có một sự chấp nhận cấu trúc đối với các hệ phân tán và sự độc lập đối với các sự hỗ trợ phần cứng có sẵn cho truyền thông đa phân phối .

Một vấn đề quan trọng là nếu như toàn bộ thành viên trong một nhóm là trong suốt đối với các tiến trình gởi tới nó. Một ví dụ cho sự thể hiện của các nhóm tiến trình là môi trường lập trình ISIS.

Trong mô hình ISIS, toàn bộ thành viên trong nhóm là trong suốt. Các hoạt động của nhóm gửi và nhóm nhận đều tốt như nhau, mô hình này cung cấp điều  khiển động đến tất cả các thành viên trong các nhóm đặc biệt bằng các hoạt động sau: Hoạt động nhóm khởi tạo, hoạt động nhóm xóa, hoạt động nhóm tham gia, hoạt động nhóm bỏ nó khởi tạo một nhóm rỗng, xóa một nhóm, tạo ra một tiến trình tham gia vào một nhóm có sẵn, hoặc bỏ nó theo từng phiên. Tham gia hoặc bỏ một nhóm, một tiến trình liên quan đến hoặc bỏ ra khỏi bảng liệt kê tương ứng các nơi nhận thông tin đa phân phối .

 

  1. Cấu trúc phần mềm

Sự thiết kế của các hệ điều hành cho các hệ thống máy tính tập trung thường được cho là “chắc chắn như đá” bởi vì tập các lệnh trừu tượng mà chúng cung cấp để sử dụng trong các chương trình ứng dụng được quyết định bởi một giao diện bất biến đơn như là : Giao diện cuộc gọi hệ thống trong hệ UNIX . Ngược lại, sự thiết kế của hệ phân tán không cần phải chắc chắn bởi vì các chương trình ứng dụng có thể truy cập đên rất nhiều dịch vụ khác nhau. Mỗi chương trình cung cấp cho chímh nó một giao diện theo thủ tục để truy cập đến các tài nguyên. Các tài nguyên được cung cấp đến các chương trình ứng dụng có thể thêm các mở rộng bằng cách thêm các dịch vụ mới. Sự khác biệt này phản ánh những đặc tính chính của các hệ phân tán.

Hình vẽ dưới đây cho thấy 4 phần cứng chính và các lớp phần mềm trong một hệ thống máy tính tập trung : Các chương trình ứng dụng, thời gian chạy cung cấp cho các ngôn ngữ lập trình ( ví dụ bộ thông dịch, các thư viện ) cho các thành phần cứng và hệ điều hành. Mỗi tầng sử dụng các chức năng của tầng dưới nó :

    Các tầng trong hệ thống máy tính tập trung:

                    Các chương trình ứng dụng
                    Hỗ trợ ngôn ngữ lập trình
                    Hệ thống mở
                    Phần cứng

Nên nhớ rằng với chuẩn hệ thống thay đổi có thể được thay thế trong giới hạn các tầng phía trên : Các ngôn ngữ lập trình ( ví dụ  C  hoặc  Smalltalk ), hệ điều hành ( ví dụ : Unix hoặc Os/2 ) và phần cứng ( ví dụ : Motoro la 68040 , Intel 80486 ). Trong các máy tính tập trung, hệ điều hành là

lớp phần mềm hệ thống chính. Nó quản lý tất cả tài nguyên cơ bản trong hệ thống cung cấp các dịch vụ thiết yếu cho các chương trình ứng dụng và người sử dụng, bao gồm :

Quản lý tài nguyên cơ bản :

_ Định vị và bảo vệ bộ nhớ.

_ Khởi tạo tiến trình và lập bảng danh mục cho bộ xử lý .

_ Điều khiển thiết bị ngoại vi .

Người sử dụng và các dịch vụ ứng dụng .

_ Sự tin cậy của người sử dụng và các điều kiện truy nhập (ví dụ: tính năng logic)

_ Quản lí tệp và tính năng truy cập tệp .

_ Tính năng thời gian .

Tất cả các dịch trên dược thực hiện chủ yếu bởi nhân hệ điều hành trong hệ thống tập trung .

Trong các hệ thống, chúng ta phải cung cấp các chức năng trên và các dịch vụ khác, các chương trình ứng dụng theo cách mà cho phép các dịch vụ mới có thể dễ dàng cài đặt vào.

 Và chúng tôi đưa ra một lớp mới các thành phần phần mềm, được gọi là các dịch vụ mở để cung cấp cho tất cả các phần khác chia sẻ tài nguyên và các dịch vụ. Nhiệm vụ của một nhân (kernel) là giới thiệu một tập lệnh trừu tượng các chương trình hướng tới các vấn đề phổ biến, như là các tiến trình cho người sử dụng và cho chương trình ứng dụng, bảo vệ chúng khỏi các chi tiết cơ bản của bộ xử lí và phần cứng khác. Thêm vào đó, các nhân bảo vệ mã, dữ liệu và phần cứng khỏi các truy cập bất hợp pháp từ người sử dụng và các chương trình ứng dụng. Các nhân(kernel) không được thiết kế để trở thành các lộ trình xác định. Nhiều dịch vụ không yêu cầu truy cập đặc quyền đến mã và dữ liệu của nhân, hoặc phần cứng máy tính không liên quan đến nhân.

Tính mở nghĩa là các hệ phân tán có thể cấu hình theo các nhu cầu đặc biệt của nhóm truyền thông, của người sử dụng có sẵn hoặc một tập các chương trình ứng dụng.

Nơi quản lí hệ thống cấu hình các dịch vụ có sẵn trong một hệ thống. Người dùng lựa chọn và sử dụng các chương trình ứng dụng. Các thành phần hệ thống dư thừa có thể tránh khỏi và các tiện lợi có thể được đưa đến các máy mới hoặc phần mềm. Nói chung, hệ thống mở phát triển máy tính với các cấu trúc khác nhau và các nhân hệ điều hành có thể hợp thành một thể thống nhất, chương trình ứng dụng chạy song song và hợp tác với một cái khác.

Ngoài những khía cạnh kỹ thuật của tính mở, các hệ thống đôi khi được gọi là mở khi các thành phần phần cứng hoặc mềm được cung cấp bởi các công ty khác nhau mà có thể làm việc với nhau trong cùng hệ thống, cụm từ “hệ thống mở” thường được sử dụng với nghĩa thương mại nhiều hơn là nghĩa kỹ thuật đưa ra ở trên.

Hình vẽ dưới đây minh họa các mục tiêu chính của phần mềm tồn tại bên trong các hệ phân tán và sự phụ thuộc lẫn nhau của chúng.

Các ứng dụng
Hỗ trợ lập trình phân tán                Các dịch vụ mở
Các dịch vụ nhân hệ điều hành
Phần cứng mạng và máy tính

Trong hình này, một đường nằm ngang chia rẽ báo hiệu rằng các dịch vụ được hỗ trợ bởi phần bên dưới đường (line) trực tiếp sử dụng bởi các thành phần bên trên.

Ví dụ các chương trình ứng dụng có thể các dịch vụ nhân OS, các hỗ trợ chương trình phân tán và các dịch vụ mở.

Các mục được mô tả ở hình trên tương ứng với các mức khác nhau về sự trừu tượng của hệ phân tán, mỗi mức đưa ra một mức khác nhau trong suốt đến người sử dụng. Ví dụ: Một người sử dụng chỉ chạy một chương trình kế toán có thể không có một tí khái niệm nào của hệ thống phân tán. Một chương trình ứng dụng phân tán khởi động các chương trình chạy tại các tập máy lựa chọn, nhưng giải quyết các chức năng của các chương trình này hơn là các đặc tính xác định của các máy: Người sử dụng có thể viết trong một ngôn ngữ lập trình phân tán và sử dụng tin tức của các dịch vụ có sẵn: Người lập trình hoặc người quản lý hệ thống sử dụng tin tức với các vai trò khác nhau của các máy khác nhau trong hệ thống.

Mỗi tầng trong hình được thực hiện bởi một tập các thành phần phần cứng hoặc phần mềm, có thể khác nhau trong giao diện và cấu trúc. Ngoài các chương trình ứng dụng và các lớp phần cứng, chúng ta có thể phân biệt 3 mục chính của phần mềm cung cấp cho sự thực hiện của các chương trình ứng dụng chúng có thể được xem như là các thành phần của hệ điều hành  phân tán. Vai trò của nó được phác thảo dưới đây:

Các dịch vụ nhân hệ điều hành : Nó phải có một nhân phần mềm trong mỗi máy tính chịu trách nhiệm cung cấp các tài nguyên, và dịch vụ cơ bản nhất trong khi phải bảo vệ các thành phần phần cứng khỏi các truy cập bất hợp pháp. Đây có thể là một qui ước. Nhân trong hệ UNIX mở rộng để cung cấp các dịch vụ truyền thông mạng như là trong 4.BSD UNIX. Nhưng có rất nhiều dịch vụ được cung cấp bởi nhân bất biến.

Điều đó đưa đến sự phát triển của các vi nhân: Có rất nhiều nhân được cung cấp bởi các tập tài nguyên và dịch vụ nhỏ nhất có thể, các dịch vụ còn lại có thể được xây dựng. Thông thường tập dịch vụ cơ bản này bao gồm một tiến trình trừu tượng và một dịch vụ truyền thông cơ bản. Mức cao nhất của tính mở là đạt được phương pháp giải quyết này. Chúng ta sẽ mô tả sự thiết kế chức năng của một vi nhân (microkernel) thông thường: Trong chương 6 đưa ra ba ví dụ (Mach,Amoeba,Chorus). Nên nhớ rằng các máy tính chạy trên các nhân  khác nhau có thể được sử dụng trong hệ phân tán miễn là các dịch vụ truyền thông là chuẩn hoá. Một hệ phân tán đơn có thể bao gồm một số máy tính dùng nhân UNIX cùng với các máy tính sử dụng các vi nhân khác để tối ưu các yêu cầu đặc biệt của chương trình ứng dụng hoặc các dịch vụ .

Các dịch vụ mở: Nó đem lại một số tính năng lập trình cho hệ phân tán thích ứng với các mức yêu cầu của các chương trình ứng dụng, các dịch vụ mới có thể phát triển và cài đặt theo các yêu cầu, cho phép các hệ phân tán thích ứng với nhiều loại yêu cầu khác nhau của các chương trình ứng dụng. Phạm vi của các dịch vụ từ các tài nguyên cơ bản như dịch vụ phân phối thư điện tử. Hầu hết các hệ thống được hỗ trợ khởi tạo ít nhất là tập các dịch vụ cầ thiết cho các qui ước phân tán trong hệ UNIX. Các tiến trình máy phục vụ và các chương trình ứng dụng không thể phân biệt được các nhân hay vi nhân trên các máy tính mà nó đang sử dụng. Vai trò của nhân đơn giản là hỗ trợ cho các máy tính với các xử lí cơ bản và các tính năng truyền thông.

Sự khác biệt giữa các dịch vụ nhân và các dịch vụ mở là: Các nhân không thể có môi trường mở. Nó bắt buộc phải tự sự bảo vệ chính mình chống lại sự thay đổi thời gian chạy, vai trò của nó là cung cấp một giao diện ổn định cho các tài nguyên mức độ thấp.

Sự hỗ trợ cho chương trình phân tán : Liên quan đến sự hỗ trợ cho thời gian chạy cho các tính năng ngôn ngữ cho phép các chương trình được viết trong các ngôn ngữ qui ước, làm việc với nhau như là lời gọi thủ tục xa và truyền thông nhóm đa phân phối. Một vài các ngôn ngữ lập trình được phát triển xác định cho các chương trình ứng dụng phân  tán. Nó yêu cầu sự hỗ trợ thời gian chạy bao quát hơn. Các thành phần hỗ trợ ngôn ngữ không liên quan đến sự phân tán như là các hệ thống dịch ngôn ngữ và các thư viện được bỏ qua từ hình trên với mục đích cho sự rõ ràng.

PHẦN V

AN TOÀN AN NINH

I. Cơ chế xác nhận

Trong các hệ thống đa người sử dụng tập trung, các cơ chế xác nhận  có thể tương đối đơn giản, cá tính của người sử dụng có thể xác nhận bằng một mật mã kiểm tra các phiên tương tác lẫn nhau, và các phiên này sau đó có thể xử lí như là một miền mà tất cả các thao tác được thực hiện bởi quyền người sử dụng. Sự gần gũi này tin cậy vào điều khiển trung tâm các nguồn hệ thống bằng một nhân hệ điều hành. Ngăn cản các phép thử lại để tạo ra các phiên tương tác để giả dạng khi có nhiều người sử dụng khác. Một mức độ điều khiển tập trung toàn bộ các tài nguyên trong một hệ thống không đạt được hoặc ngay cả khi mong muốn trong cấu trúc mở nhiều hơn của các hệ phân tán có mục đích chung.

Trong các hệ phân tán sự xác nhận là một phương tiện mà tính đồng nhất của các máy  phục vụ và máy khách là đáng tin cậy. Cơ chế được dùng đạt được các điều này dựa trên cơ sở quyền sở hữu của các khóa mật hóa, từ việc một phần chính chiếm hữu một khóa mật, chúng ta kết luận rằng phần chính có tính đồng nhất mà nó có quyền yêu cầu, đúng như trong các tầng bí mật hoặc công việc tình báo, quyền sở hữu của một mật mã bí mật được thực hiện xác thực tính đồng nhất  của bộ xử lý.

Các cơ chế xác nhận của hệ phân tán lấy biểu mẫu của một dịch vụ xác nhận. Các dịch vụ xác nhận này tin cậy vào mức sử dụng của sự mật hóa bảo đảm an toàn. Các dịch vụ này yêu cầu một phương tiện an toàn dự phòng tạo ra, lưu trữ và phân tán tất cả các khóa mật mã hóa cần thiết trong một hệ phân tán, được biết đến như là một dịch vụ phân tán khóa mật hóa.

Kiểm soát an toàn
Các cơ chế điều                             Các chức năng khiển truy cập                                                 mật mã hóa
Các dịch vụ phân tán khóa mật hóa và xác nhận

 

  1. Các cơ chế điều khiển truy cập

Các cơ chế điều khiển truy cập liên quan tới việc đảm bảo truy cập các nguồn thông tin ( ví dụ như các tệp, các tiến trình hoặc các cổng truyền thông) và các nguồn phần cứng ( ví dụ như máy in, các công cụ xử lý hoặc các cổng mạng ) có sẵn để tập hợp con của nhiều người sử dụng được cho phép để truy cập hiện tại.

Các cơ chế điều khiển truy cập xuất hiện trong các hệ điều hành đa ngươi sử dụng không phân tán. Trong hệ điều hành UNIX, qui ước và đa người sử dụng khác các tệp là các nguồn thông tin chia sẻ quan trọng nhất, và một cơ chế điều khiển truy cập được cung cấp cho phép mỗi người sử dụng bảo vệ một số tệp cá nhân và chia sẻ các tệp này trong một kiểu điều khiển. Một cơ chế được biết đến cho giới hạn truy cập đến các tệp cá nhân được kết hợp chặt chẽ trong hệ điều hành UNIX dựa trên cơ sở một phiên bản các danh sách điều khiển truy cập.

TÀI LIỆU THAM KHẢO

  • DISTRIBUTED SYSTEMS CONCEPS AND DESIGN của George Coulouris, Jean Dollimore và Tim Kindberg.
  • Tham khảo trang web: http://lass.cs.umass.edu/~shenoy/courses/677

Hệ phân tán (phần 2)

PHẦN III

VẤN ĐỀ VÀ GIẢI PHÁP CHO VIỆC SỬ DỤNG TÀI NGUYÊN TRONG HỆ PHÂN TÁN

 

CHƯƠNG I

DỊCH VỤ TÊN VÀ VIỆC ĐỊNH DANH TÀI NGUYÊN

TRONG HỆ THỐNG

  1. Dịch vụ tên

Dịch vụ tên cũng như một dịch vụ khác, được sử dụng bởi những tiến trình client thu được những thuộc tính như địa chỉ của các nguồn tài nguyên,  đối tượng khi tên của chúng được chỉ ra. Đối tượng được đặt tên có thể có nhiều dạng và chúng có thể được quản trị bởi nhiều dịch vụ khác.

Ví dụ: Các tên thường được sử dụng để lưu trữ những địa chỉ và những chi tiết khác của người sử dụng, máy tính, những miền mạng và các dịch vụ…

Những vấn đề thiết kế cơ bản cho dịch vụ tên, như cấu trúc, quản lý không gian tên được nhận biết bởi dịch vụ, và những thao tác mà dịch vụ tên hỗ trợ chỉ ra và minh hoạ trong ngữ cảnh của mô hình dịch vụ tên. Chúng ta luôn nghiên cứu làm thế nào những dịch vụ tên được thi hành, điều khiển sự điều hướng thông suốt trong một tập các tên server khi ánh xạ một tên, lưu trữ dữ liệu tên và sao lưu dữ liệu tên để làm tăng hiệu năng và giá trị.

Những dịch vụ tên.

Một dịch vụ tên lưu trữ một cơ sở dữ liệu ràng buộc giữa một tệp tên nguyên bản và những thuộc tính của đối tượng như những người sử dụng và các máy tính tồn tại bên ngoài bất kỳ một dịch vụ đặc biệt nào. Thao tác chính hỗ trợ một dịch vụ tên là ánh xạ một tên, nghĩa là tra cứu những thuộc tính trong cơ sở dữ liệu từ một tên đã định. Những thao tác thì luôn luôn yêu cầu thiết lập những ràng buộc mới với những tên mới, xoá những ràng buộc, và đưa ra danh sách miền tên. Mặc dù chúng ta nghiên cứu tập hợp của những ràng buộc như một cơ sở dữ liệu, nó được đánh dấu như là một tên toàn cục không phải là những khoá đơn giản nhưng thường có vài thành phần phải được tra cứu trong những bản sao của cơ sở dữ liệu, được gọi là ngữ cảnh.

Quản trị tên được tách ra từ những dịch vụ mở rộng khác là do tính mở của các hệ phân tán. Một trong những hướng nổi bật nhất của vấn đề này là những dịch vụ đặt tên toàn cục.

Ví dụ: Một giao diện tên RPC được dịch thành một địa chỉ server tương đối mà không cần tra cứu trực tiếp trong bản sao, trong hầu hết những hệ thống tập trung, nơi mà dịch vụ được yêu cầu bởi một lời gọi đặc biệt của hệ thống là hoàn toàn tuyệt đối. Đặc biệt hơn, tính mở mang lại những đặc tính sau cho tên riêng biệt từ những dịch vụ khác.

-Tính thống nhất.

 Đặc tính này thường mang đến lợi ích cho việc quản trị các nguồn tài nguyên bởi những máy chủ khác nhau, hoặc những dịch vụ khác nhau xuất hiện cùng lớp với lược đồ tên.

-Tính tích hợp

 Đặc tính này không luôn cần thiết trong phạm vi chia sẻ của một hệ phân tán. Nó chỉ trở nên cần thiết khi có nhu cầu chia sẻ với những hệ thống khác, vì vậy tên các nguồn tài nguyên được thiết lập trong nhiều miền quản trị khác nhau.

– Dịch vụ tên yêu cầu chung

 Những dịch vụ tên được khởi đầu hoàn toàn đơn giản cho tới khi chúng được thiết kế, khi thấy cần thiết ràng buộc các tên với những địa chỉ trong một miền quản trị đơn, tương ứng với một mạng LAN hoặc WAN đơn. Sự liên kết  của các mạng và sự mở rộng phạm vi của các hệ phân tán sinh ra vấn đề ánh xạ tên nhiều hơn.

Dịch vụ tên cung cấp một miền dùng để định danh tài nguyên trong hệ thống. Người sử dụng thông qua các miền để truy cập vào tài nguyên của hệ thống.

Dịch vụ tên duy trì những thông tin cần thiết cho những tên được ánh xạ và cung cấp dịch vụ phân rã tên cho các máy khách. Thiết kế của chúng ảnh hưởng tới hiệu năng, tính co giãn và tính an toàn của hệ phân tán.

Dịch vụ tên cũng cung cấp các bảng ghi tài nguyên để người sử dụng có thể thông qua tên miền truy cập vào tài nguyên của hệ thống.

Bảng ghi tài nguyên: Dữ liệu vùng được lưu trữ bởi tên máy chủ và trong những file. Mỗi bản ghi ánh xạ đến tên miền của nó, ánh xạ này không được chỉ ra. Những thực thể trong bảng ánh xạ đến những chỉ mục đã được đề cập, ngoại trừ những thực thể CNAME giữ một bí danh cho tên trong miền khác, và những thực thể TXT bao gồm những thông tin khác tuỳ ý, lưu trữ lại các tên miền.

Dịch vụ tên cung cấp những dịch vụ tên miền trong hệ phân tán và dịch vụ này cũng giúp người sử dụng thông qua tên miền truy cập vào nguồn tài nguyên của hệ thống. Một tên hoặc một định danh trong hệ phân tán có thể giúp ta định vị được địa chỉ của nguồn tài nguyên hoặc đối tượng. Tên và các định danh cũng góp một phần vào việc bảo vệ các nguồn tài nguyên. Chính vì vậy, vấn đề đặt tên hoặc định danh tài nguyên trong các hệ phân tán đã được đặt ra từ lâu và có một số phương pháp định danh rất hiệu quả để quản lý tài nguyên trong các hệ phân tán.

  1. Định danh

Một tiến trình yêu cầu truy nhập vào một tài nguyên không có tên hoặc định danh, chúng ta phải dùng thuật ngữ tên để tham chiếu đến các tên đó mà những tên này được thông dịch bởi người sử dụng hoặc chương trình. Còn từ định danh là tên được chỉ, được thông dịch hoặc sử dụng chỉ bởi các chương trình.

Chúng ta nói rằng, tên là một ánh xạ khi mà nó được dịch sang một biểu mẫu, trong đó nó có thể thực hiện một thao tác trên nguồn tài nguyên hoặc một đối tượng mà nó tham chiếu. Trong hệ phân tán, một tên được ánh xạ thường dùng để định danh truyền thông cùng với những thuộc tính có thể hữu ích trong truyền thông. Biểu mẫu của định danh truyền thông phụ thuộc vào loại định danh được cung cấp trong hệ thống truyền thông mà nó sử dụng.

Ví dụ: trong truyền thông Internet một định danh truyền thông phải chứa cả hai phần định danh máy trạm (gọi là địa chỉ IP), và số hiệu một cổng truyền thông đặc biệt để định vị các máy trạm đó.

Độ phân giải của tên có thể được dẫn chứng ở vài bước dịch. Ở bước đầu tiên, một tên hoặc một định danh được ánh xạ thành mức định danh thấp, mà nó có thể được sử dụng để định rõ một nguồn tài nguyên khi truyền thông với vài thành phần phần mềm. Ở vài giai đoạn tiếp theo của chuỗi dịch này, một định danh truyền thông được phân chia thành hệ thống truyền thông con mà nó sử dụng, và hệ thống này có thể được sử dụng để truyền một yêu cầu đến người quản trị tài nguyên. Hệ thống truyền thông con phải thực hiện bước dịch xa hơn để phân chia địa chỉ mạng và thông tin luồng mà có thể chấp nhận được với tầng phần mềm mức mạng thấp.

Đặt tên trong hệ phân tán bao gồm các yêu cầu sau:

-Lựa chọn không gian tên thích hợp cho mỗi loại tài nguyên. Một không gian tên thích hợp có thể hữu hạn hoặc vô han, và có thể có cấu trúc hoặc “phẳng”. Mọi tài nguyên quản trị được đặt một tên khác nhau, bất cứ ở đâu khi chúng được định vị. Trong hệ hướng đối tượng, mọi đối tượng được đặt tên đồng nhất, chúng được cung cấp một không gian tên đơn.

-Các tên tài nguyên phải được ánh xạ thành định danh truyền thông. Thông thường điều này được thực hiên bằng cách lưu giữ những bản sao của tên và những bước dịch của nó trong dịch vụ tên. Một vài loại tài nguyên như file, được truy cập thường xuyên, cho nên sự thiết lập tên là tốt nhất ở nơi quản trị tài nguyên. Những tên cục bộ được sử dụng gần đây và những định danh ánh xạ của chúng thường được lưu trữ cục bộ của các máy client theo thứ tự để tránh truyền thông không cần thiết với tài nguyên được quản trị hoặc tên server.

Có nhiều dạng định danh và nhận biết, mỗi dịch vụ hỗ trợ những mục đích cụ thể. Vài định danh được thiết kế trở nên “gần gũi với con người” để người dùng có thể đọc, gọi lại và dùng lại chúng.

Biểu đồ tên có thể được thiết kế để bảo vệ các nguồn tài nguyên mà những nguồn tài nguyên đó nhận dạng từ những truy cập trái phép. Mỗi từ định danh được lựa chọn sao cho sự truy cập là khó khăn cho bất kì tiến trình nào không chứa từ định danh để tiến trình đó được hoạt động lại mà không có sự giúp đỡ từ dịch vụ tên, và dịch vụ tên kiểm tra tính hợp lệ của những tiến trình máy khách để điều chỉnh những từ định danh mà chúng yêu cầu. Những từ định danh thực hiện những yêu cầu này được biết đến như một năng lực tiềm tàng.

Việc đưa vào những địa chỉ mạng hoặc thông tin định vị khác tên và những từ định danh xung đột với những yêu cầu về tính trong suốt làm tăng sự khác biệt giữa tên thuần tuý và những tên khác. Tên thuần tuý là những mẫu bit đơn giản mà không có sự chú thích, chúng phải được ánh xạ bởi những danh sách tên lưu trữ với những định danh truyền thông tương ứng. Những tên khác chứa thông tin về định vị của đối tượng hoặc về đối tượng sử dụng chấp nhận được, chúng có thể được ánh xạ bằng cách thực hiện vài thuật toán trích một định danh truyền thông từ tên. Những tên mà chứa những thông tin nhúng về sự định vị của các nguồn tài nguyên chúng định danh không hợp lệ nếu nguồn tài nguyên mà tên đề cập thay đổi định vị của chúng, nếu chúng được lưu trữ, được cập nhật cơ sở dữ liệu của những tên hợp lệ, và những tên cũ hầu hết không được phân chia lại cho những tài nguyên mới.

 

 

 

 

 

 

 

 

 

CHƯƠNG II

HỆ ĐIỀU HÀNH PHÂN TÁN VÀ VẤN ĐỀ QUẢN LÍ TÀI NGUYÊN

 

  1. Hệ điều hành phân tán

Một mục tiêu quan trọng của việc nghiên cứu và phát triển hệ phân tán là phát triển hệ điều hành phân tán. Chúng ta có thể định nghĩa những mục tiêu hệ điều hành phân tán bằng cách so sánh với những hệ điều hành quy ước như UNIX, một hệ điều hành chuẩn. Một hệ điều hành phân tán là một tập hợp của các thành phần phần mềm, mà nó đơn giản hoá các tác vụ của chương trình và hỗ trợ trên phạm vi lớn nhất có thể của các chương trình ứng dụng. Không giống như các hệ điều hành quy ước, hệ điều hành phân tán có thể điều chỉnh và mở rộng. Các thành phần mới có thể được bổ sung vào hệ điều hành phân tán để đáp ứng những yêu cầu mới của các chương trình ứng dụng. Mô đun trong hệ điều hành phân tán dựa trên sự hỗ trợ của truyền thông giữa các mô đun.

Thiết kế hệ điều hành cho hệ thống máy tính tập trung thường được đề cập đến như một sự đồng nhất, bởi vì tập hợp của những đoạn mà chúng cung cấp cho việc sử dụng trong những chương trình ứng dụng được xác định bởi một giao diện đơn không biến đổi, giống như một hệ thống được gọi là giao diện trong UNIX. Trái lại, thiết kế của hệ điều hành phân tán không cần thiết đồng nhất bởi những chương trình ứng dụng, có thể truy cập bởi nhiều dịch vụ khác nhau, mỗi sự cung cấp của nó là một giao diện thủ tục cho việc truy cập vào các nguồn tài nguyên.

Các nguồn tài nguyên cung cấp cho các chương trình ứng dụng có thể được mở rông bằng cách thêm vào những dịch vụ mới. Sự khác biệt này phản ánh qua đặc trưng của hệ phân tán được goi là tính mở.

Trong hệ thống máy tính tập trung, hệ điều hành là tầng phần mềm chính. Nó quản trị tất cả những tài nguyên cơ bản trong hệ thống, và cung cấp những dịch vụ căn bản cho những chương trình ứng dụng, và người sử dụng. Những dịch vụ này chủ yếu được thực hiện bởi nhân của hệ điều hành trong hệ thống máy tính tập trung.

Trong hệ phân tán, chúng ta phải cung cấp những tiện ích và những dịch vụ khác cho những chương trình ứng dụng theo cách mà những dịch vụ mới có thể được thêm vào một cách thuân tiện. Để làm được việc này, chúng ta phải giới hạn vai trò của nhân trong quản trị tài nguyên cơ bản:

– Cấp phát và bảo vệ bộ nhớ.

– Khởi tạo và lập chương trình cho bộ vi xử lý.

– Truyền thông liên tiến trình.

-Điều khiển thiết bị ngoại vi.

Và chúng ta đưa vào một lớp mới của các thành phần phần cứng gọi là các dịch vụ mở rộng để cung cấp tất cả những nguồn tài nguyên, và những dịch vụ chung khác.

Chúng ta đã nói về các thành phần của hệ điều hành phân tán, và vai trò của hệ điều hành trong hệ phân tán mở. Chúng ta có thể tổng kết những điều trên bằng những đặc tính mở rộng của hệ điều hành phân tán:

Các tác vụ của hệ điều hành có thể làm cho hệ phân tán được lập trình thuận tiện hơn, vì vậy các tác vụ có thể được sử dụng để thực thi trong phạm vi lớn nhất có thể của các chương trình ứng dụng.

Hệ điều hành phân tán thực thi các tác vụ bằng cách thực thi các chương trình ứng dụng trên diện rộng, định hướng trừu tượng tài nguyên trong hệ thống phân tán.

Trong một hệ phân tán mở, hệ điều hành phân tán được thực thi bởi một tập hợp của các nhân, và các máy chủ (các tiến trình máy chủ). Không có sự phân chia rõ rệt giữa hệ điều hành phân tán (hoặc đúng hơn là các dịch vụ mở của nó) và các trình ứng dụng chạy trên nền của hệ phân tán mở đó.

Một hệ điều hành phân tán phải cung cấp những điều kiện thuận lợi gói gọn trong một mô đun, và bảo vệ cấu thành đó, trong khi các máy khách truy cập tài nguyên trên mạng diện rộng. Các nhân và các máy chủ đều quản trị các nguồn tài nguyên:

– Sự đóng gói: Cả nhân và máy chủ đều cung cấp giao diện dịch vụ có lợi cho tài nguyên của chúng, đó là thiết lập những thao tác đáp ứng yêu cầu của các máy khách. Chi tiết của việc quản lý bộ nhớ và các thiết bị để thực thi các nguồn tài nguyên, nên được ẩn đi từ các máy khách, thậm chí ngay cả khi chúng cùng nằm trong một phạm vi.

– Xử lý đồng thời: Các máy khách có thể chia sẻ các nguồn tài nguyên và truy cập vào chúng một cách đồng thời. Quản trị tài nguyên chịu trách nhiệm về tính tương tranh trong suốt.

– Bảo vệ: Các nguồn tài nguyên yêu cầu phải được bảo vệ bởi những truy cập bất hợp pháp.

– Để thực hiện cùng lúc các lời gọi tác vụ liên quan sau:

+ Sự phân giải tên: Máy chủ (hoặc nhân) quản trị một nguồn tài nguyên phải được định vị từ các định danh của nguồn tài nguyên.

+ Truyền thông: Các đối số của thao tác và kết qủa phải được truyền đi từ các nguồn tài nguyên được quản trị đến một mạng hoặc một máy tính cá nhân.

+ Lập biểu: Vấn đề này liên quan đến vấn đề tương tranh, khi một lệnh được thực thi, tiến trình của nó phải được lập biểu trong phạm vi của nhân hoặc máy chủ.

Trong hệ điều hành, nhân có vai trò quan trọng, nó cung cấp những kỹ thuật cơ bản nhất nhưng vẫn mang tính tổng quát, nó có nhiệm vụ quản lý tài nguyên. Máy chủ có thể thích nghi với sự tự động nạp vào, thực thi đòi hỏi  những chính sách quản lý tài nguyên. Chỉ có một vài cơ sở nghiên cứu trong hệ thống phân tán, có thể nói rằng điều khiển bởi một trình đơn thuần nhất trong hệ điều hành phân tán mà mọi máy tính thi hành tương tự như nhân. Một hệ điều hành phân tán phải hiện hành trên mạng với những quy ước: Các nhân của hệ điều hành như là UNIX, mà hầu hết các trạm làm việc thi hành và nhiều ứng dụng được tồn tại.

  1. Nhân của hệ điều hành và việc quản lý tài nguyên

Hệ điều hành có thể được coi như là bộ phân phối tài nguyên của máy tính. Nhiều tài nguyên của máy tính như thời gian sử dụng CPU, vùng bộ nhớ, vùng lưu trữ tập tin, thiết bị nhập xuất v.v… Được các chương trình yêu cầu để giải quyết vấn đề. Hệ điều hành hoạt động như một bộ quản lý các tài nguyên, phân phối chúng cho các chương trình và người sử dụng khi cần thiết. Do có rất nhiều yêu cầu, hệ điều hành phải giải quyết vấn đề tranh chấp và phải quyết định cấp phát tài nguyên cho những yêu cầu theo thứ tự nào để hoạt động của máy tính là hiệu quả nhất. Một hệ điều hành cũng có thể được coi như là một chương trình kiểm soát việc sử dụng máy tính, đặc biệt là các thiết bị nhập xuất.

Nhân là một chương trình được phân biệt bởi các mã chương trình của nó, được thực thi thật sự với những đặc quyền truy cập hoàn toàn vào các nguồn tài nguyên vật lý trên các máy chủ cài đặt hệ điều hành với nhân đó. Đặc biệt, nhân có thể điều khiển đơn vị quản lý bộ nhớ và thiết lập các thanh ghi bộ vi xử lý, vì vậy không có ngã nào khác có thể truy cập vào các nguồn tài nguyên của máy. Tuy nhiên, nhân có thể cho phép mã nguồn của máy chủ truy cập vào các nguồn tài nguyên vật lý.

Nhân có thể thiết lập các không gian địa chỉ để bảo vệ các tiến trình khỏi sự truy cập của các tiến trình khác, và cung cấp cho chúng những yêu cầu về cách sắp xếp bộ nhớ ảo. Một không gian địa chỉ là một tập hợp các phạm vi định vị của bộ nhớ ảo, trong mỗi phạm vi đó, một liên kết đặc biệt của các ứng dụng truy cập bộ nhớ đúng đắn, như là ứng dụng chỉ đọc hoặc vừa đọc vừa ghi. Một tiến trình có thể không truy cập ra ngoài không gian địa chỉ bộ nhớ của nó. Các tiến trình đang thực hiện mã của nhân thi hành ở trong không gian địa chỉ của nhân, các tiến trình ứng dụng thông thường thi hành trong không gian địa chỉ riêng biệt.

Bổ sung để bảo vệ cơ sở bộ nhớ, nhiều bộ xử lý có hỗ trợ chế độ thanh ghi phần cứng, những bộ xử lý này được thiết lập ở các trạm có các lệnh đặc quyền không thực hiện, các bộ xử lý đó thường xác định các bảng bảo vệ mà hiện thời được xây dựng bởi đơn vị quản lý bộ nhớ. Một nhân tiến trình thực hiện với bộ xử lý trong chế độ đặc quyền: Nhân sắp đặt các tiến trình khác thực hiện trong chế độ người sử dụng. Thuật ngữ tiến trình người sử dụng hoặc tiến trình cấp người sử dụng thường được sử dụng để mô tả một tiến trình thực hiện ở trong chế độ của người sử dụng và có cấp không gian địa chỉ cấp người sử dụng. Nhưng chú ý rằng trong một số hệ thống, một tiến trình với không gian địa chỉ cấp người sử dụng có thể được thực hiện ở trong chế độ độc quyền, trong thứ tự điều khiển quyết định.

Trong cơ chế gọi, các nguồn tài nguyên được quản trị bởi nhân được biết đến như là một hệ thống lời gọi TRAP. Điều này được thực thi bởi lệnh mức máy TRAP mà câu lệnh được đặt trong bộ vi xử lý trong chế độ độc quyền và chuyển đến không gian địa chỉ của nhân. Phần cứng bắt bộ vi xử lý thực hiện một hàm điều khiển hỗ trợ nhân khi lệnh TRAP được thực hiện, vì vậy không một tiến trình của người sử dụng nào có thể giành được quyền điều khiển của phần cứng.

Trong các hệ thống máy tính tập trung cũng như phân tán, hệ điều hành có chức năng quản lý và bảo vệ các nguồn tài nguyên khỏi sự truy nhập bất hợp pháp khi các chương trình đang hoạt động. Cung cấp các dịch vụ cơ bản cho các chương trình ứng dụng và người sử dụng. Chính vì vậy mà vai trò của hệ điều hành đặc biệt là nhân của hệ điều hành là không thể phủ nhận trong việc quản lý các nguồn tài nguyên hệ thống. Giải pháp đưa ra cho viêc quản lý tài nguyên phụ thuộc vào nhân của hệ điều hành đó là việc thiết kế các Microkernel để việc quản lý tài nguyên có hiệu quả hơn.

Microkernel quản lí tất cả các tiến trình, quản lí bộ nhớ, …Các Microkernel có thể thay đổi kích cỡ từ khoản 10Kb đến vài trăm Kb để có thể thi hành được mã lệnh và dữ liệu tĩnh.

Microkernel được thiết kế di động giữa các cấu trúc máy tính. Điều kiện thuân lợi của Microkernel là có cấu trúc tầng để cho các thành phần phụ thuộc vào máy làm giảm bớt tối thiểu lớp cuối. Điều này bao gồm các thủ tục điều khiển thanh ghi, quản lý đơn vị bộ nhớ, đơn vị dấu chấm động các thanh ghi, và các thủ tục cho sự giải quyết ngăn chặn các ngắt, các trường hợp khác ngoại lệ.

Các thành phần chính của Microkernel:

– Quản lý tiến trình: Điều khiển sự thích hợp của các lệnh ở mức thấp trên các tiến trình. Các điều kiện được cung cấp bởi mức này thường dùng để nâng cao các ứng dụng bằng cách cho một hệ thống con can thiệp để hỗ trợ các ngôn ngữ hoặc sự cạnh tranh trên hệ điều hành.

– Quản lý luồng: Sự thiết lập các luồng, đồng bộ và sự thiết lập chương trình. Các luồng là các hoạt động có thể thiết lập, được đính kèm với các tiến trình, và được mô tả đầy đủ. Để tăng tính thuận lợi của bộ đa vi xử lý, các luồng được lập trình để có thể truy cập vào các bộ vi xử lý. Chính sách thiết lập chương trình có thể bỏ đi ở các mô đun mức người sử dụng.

Quản lý truyền thông: Truyền thông giữa các luồng được đính kèm vào các tiến trình cục bộ khác. Trong một vài thiết kế, một mức hỗ trợ truyền thông giữa các luồng trong tiến trình từ xa thì bao gồm nhân. Trong trường hợp khác, nhân không có khái niệm xây dựng các máy tính khác trong nó, và một dịch vụ được thêm vào thì luôn được đòi hỏi trong truyền thông mở rộng.

– Quản lý bộ nhớ: Quản lý nguồn tài nguyên bộ nhớ vật lý, quản lý đơn vị bộ nhớ vật lý và các Cache phần cứng.

– Giám sát: Giải quyết ngắt, hệ thống gọi các bẫy và các trường hợp ngoại lệ khác.

CHƯƠNG III

CHIA SẺ TÀI NGUYÊN

Đôi khi vì quá quen thuộc với lợi ích của việc chia sẻ tài nguyên mà ta có thể dễ dang bỏ qua tầm quan trọng của chúng. Nhưng chia sẻ tài nguyên là một vấn đề cơ bản trong việc sử dụng tài nguyên của hệ phân tán. Lợi ích của việc chia sẻ tài nguyên đã được thừa nhận từ lâu trong các hệ thống đa người dùng.

Chia sẻ tài nguyên phần cứng và các thiết bị ngoại vi khác làm thuận tiện trong việc sử dụng và giảm giá thành.

Chia sẻ dữ liệu giải quyết rất nhiều các nhu cầu cần thiết và  ứng dụng của máy tính.

Chia sẻ file hỗ trợ việc chia sẻ lưu trữ thường trực và thông tin, cho phép các chương trình người dùng truy nhập các file từ xa không cần phải sao chép chúng đến những đĩa cục bộ, và nó cung cấp sự truy nhập đến các file từ những vị trí không có đĩa.

Chia sẻ dữ liệu và giao tác: Xem một máy chủ như là một thành phần của hệ phân tán mà nó quản trị một tài nguyên đơn. Máy chủ này gói gọn những tài nguyên mà nó quản trị, cho phép chúng được tạo ra, được truy cập, thao tác bởi các phương tiện hoạt động và có thể viện dẫn bởi các máy khách. Các thao tác có hiệu lực đến các máy khách được định nghĩa trong giao diện dịch vụ. Thông qua giao diện dịch vụ mà máy khách truy cập đến các mục dữ liệu ở máy chủ đang viện dẫn đến một trong các thao tác ở máy chủ.

Chia sẻ bộ nhớ phân tán: Là một khái niệm trừu tượng, sử dụng chia sẻ dữ liệu giữa các máy tính nhưng không chia sẻ bộ nhớ vật lý.

Sau đây, chúng ta sẽ đi sâu xem xét các vấn đề chia sẻ tài nguyên như đã nêu vắn tắt ở trên.

  1. Chia sẻ file

            I.1. Vấn đề chia sẻ file

File là sự trừu tượng hoá của việc lưu trữ thường trực. Khi được giới thiệu về lưu trữ đĩa những năm 1960, các hệ thống gồm một thành phần hệ thống file mà nó là nguyên nhân của sự tổ chức, lưu trữ, sửa chữa, định danh, chia sẻ và sự tự bảo vệ của các file. Hệ thống file cung cấp một tập các bộ thao tác chương trình, với các đặc điểm là sự trừu tượng hoá file, những nhà lập trình tự do có liên quan với những chi tiết của cách bố trí và sự chỉ định lưu trữ. Lưu trữ file được thực hiện trên các đĩa từ và môi trường lưu trữ ổn định khác.

Sự đòi hỏi dịch vụ file phân tán: Một dịch vụ file phân tán là một thành phần thiết yếu trong các hệ phân tán, sự thi hành một hàm tương tự với thành phần hệ thống file trong các hệ xử lý quy ước. Nó có thể dùng để hỗ trợ việc chia sẻ, lưu trữ thường trực và thông tin: Nó cho phép các chương trình người dùng truy nhập các file từ xa không cần phải sao chép chúng đến đĩa cục bộ và nó cung cấp sự truy cập đến các file từ những vị trí không có đĩa. Những dịch vụ khác, như là dịch vụ định danh (người kết nối), dịch vụ hợp lệ hoá người dùng và dịch vụ in ấn, có thể được thi hành một cách dễ dàng khi chúng có thể gọi vào dịch vụ file để nhận những nhu cầu của họ về việc lưu trữ thường trực.

Thiết kế được mở ra trong các dịch vụ thư mục khác, có thể dùng với một dịch vụ file phẳng đơn hỗ trợ các qui tắc định danh khác và cấu trúc thư mục và những mô đun khách hàng khác có thể được dùng để thi hành các chương trình khác. Sự mô phỏng các dịch file của các hệ thống xử lí đa dạng khác, sự tối ưu thi hành trạm làm việc khác và cấu hình dịch vụ.

Dịch vụ tệp phẳng: Dịch vụ tệp phẳng có liên quan tới các xử lý thi hành trên nội dung của file. Bộ nhận biết file độc nhất (UFIDs) được dùng để chỉ đến các file trong tất cả yêu cầu cho các xử lí dịch vụ tệp phẳng. Sự phân chia trách nhiệm giữa dịch vụ file và dịch vụ thư mục làm nền tảng cho việc sử dụng UFIDs.

Dịch vụ thư mục: Cung cấp một ánh xạ giữa các tên văn bản cho các file và tiếp theo UFDIs. Khi một file được tạo, mô đun khách hàng phải ghi lại UFDI của mỗi file trong một thư mục, đồng thời với một tên văn bản. Khi một tên văn bản của một file được ghi lại theo hướng này, những khách hàng có thể đạt được UFDI của file bởi sự trích dẫn tên văn bản của nó cho dịch vụ thư mục. Dịch vụ thư mục cung cấp các hàm cần thiết để sinh ra và cập nhật các thư mục và cho UFDIs hiện hành từ các thư mục. Nó là một khách hàng của dịch vụ tệp phẳng. Các file thư mục của nó được lưu trữ trong các file của dịch vụ file phẳng. Khi một lược đồ định danh file phân cấp được nhận làm thứ cấp, như trong UNIX, các thư mục sẽ hiểu được sự chuyển đến các thư mục khác.

Mô đun khách hàng: Mô đun khách hàng đơn chạy trong mỗi máy tính khách hàng, tương tác, mở rộng xử lý của dịch vụ tệp phẳng và dịch vụ thư mục dưới một giao diện chương trình ứng dụng đơn mà nó hữu dụng cho những chương trình mức độ người dùng trong các máy khách. Ví dụ, trong máy chủ UNIX, một mô đun khách hàng sẽ được cung cấp sự mô phỏng đầy đủ tập các xử lý file UNIX, sự thông dịch tên file nhiều phần của UNIX bởi yêu cầu tương tác đến dịch vụ thư mục. Mô đun khách hàng cũng nhận biết thông tin về vị trí mạng của dịch vụ tệp phẳng, và các quá trình dịch vụ thư mục. Cuối cùng, mô đun khách hàng có thể thực hiện một vai trò quan trọng trong việc đạt được sự thi hành đúng ý chuyển qua thi hành một vùng lưu trữ của các khối file được dùng gần đây tại máy khách.

Dịch vụ thư mục: Chúng ta sẽ định nghĩa một dịch vụ thư mục cơ bản để tạo và hỗ trợ sự ghi vào trong thư mục thứ cấp đơn giản (không phân cấp), tìm tên văn bản trong các thư mục và trả về UFDI tương ứng sau khi đăng ký người dùng. Những mức độ khác nhau của hàm chức năng sẽ được xây dựng với mô đun khách hàng để phân tách đường dẫn nhiều phần, xây dựng các thư mục phân cấp, hoặc những cấu trúc khác và thi hành các tìm kiếm phức tạp.

            1.2. Các giải pháp được thiết kế cho sự chia sẻ file

Các hệ thống file được thiết kế để lưu trữ và quản lý số lượng lớn các file, với các tiện ích cho việc tạo, định danh và xoá các file. Việc định danh các file được hỗ trợ bởi việc dùng các thư mục. Một thư mục là một file thông thường của một loại đặc biệt, mà nó cung cấp một ánh xạ từ các tên văn bản đến sự nhận biết các file bên ngoài. Trong tất cả các thư mục hệ thống, file có thể bao gồm các tên của các thư mục khác, ảnh hưởng đến lược đồ tên file có phân cấp quen thuộc, những đường dẫn nhiều thành phần của file được dùng trong UNIX và các hệ xử lí khác. Các hệ thống file cũng có khả năng đáp ứng việc điều khiển truy nhập đến file.

Trong suốt hoá việc truy nhập: Những chương trình khách hàng thì không nên nhận biết sự phân tán của các file. Một sự đơn lẻ tập hợp các xử lí được cung cấp cho sự truy nhập đến các file cục bộ và ở xa. Các chương trình được viết để xử lý trên các file cục bộ để có sự truy nhập các file từ xa mà không cần sự hỗ trợ.

Trong suốt hoá sự định vị: Những chương trình máy khách nên hiểu một không gian tên file duy nhất. Các file hoặc nhóm các file có thể được định vị lại mà không cần thay đổi đường dẫn của chúng, và các chương trình người dùng hiểu không gian tên file tương tự bất cứ lúc nào chúng được thi hành.

Trong suốt hoá sự đồng thời: Việc thay đổi một file bởi một khách hàng không gây trở ngại đến sự xử lý của các khách hàng khác truy nhập hoặc thay đổi một cách đồng thời file đó. Sự cần thiết điều khiển đồng thời việc truy nhập đến dữ liệu được chia sẻ trong nhiều ứng dụng thì được chấp nhận một cách rộng rãi, và các kỹ thuật đã được biết đến sự thi hành của nó, nhưng chúng rất tốn kém. Tất cả các dịch vụ file hiện thời tiếp theo UNIX không cung cấp sự điều khiển hiện thời (như là trong BSD UNIX) hoặc chỉ tư vấn việc khoá các file (như là trong hệ thống V UNIX).

Trong suốt hoá các lỗi sai: Sự xử lí chính xác của các dịch vụ sau khi có lỗi của một khách hàng và sự xử lý chính xác của các chương trình khách hàng trên những thông điệp bị mất và sự ngắt tạm thời của dịch vụ là mục đích chính. Các dịch vụ file giống UNIX có thể đạt được bởi việc không nhận của các máy chủ và lặp lại sự xử lý dịch vụ.

Trong suốt hoá sự thi hành: Những chương trình máy khách nên tiếp tục thi hành bình thường trong khi tải những giá trị ở dịch vụ với một sắp xếp đặc biệt.

Có 2 sự đòi hỏi quan trọng khác ảnh hưởng đến tính lợi ích của dịch vụ file phân tán.

Phần cứng và tính không đồng nhất hệ thống xử lý: Giao diện dịch vụ  được định nghĩa để phần mềm khách hàng và phục vụ có thể được thi hành trên các hệ thống và các máy tính xử lý khác. Sự đòi hỏi này là một khía cạnh quan trọng của tính mở.

Tính khả mở: Dịch vụ có thể mở rộng bởi việc phát triển sự phân chia trên phạm vi rộng của việc tải và kích cỡ mạng.

Những hình thức tiếp theo của sự rõ ràng cũng được đòi hỏi nếu tính khả mở được mở rộng để chứa được những mạng với số lượng rất lớn các vị trí hoạt động. Cho đến nay chưa có dịch vụ file đạt được tất cả chúng một cách đầy đủ. Mặc dù tất cả các dịch vụ file được phát triển gần đây xác nhận một số trong các điều đó.

Trong suốt hoá sự tái tạo: Một file có thể được trình bày bởi một vài bản sao những nội dung của nó tại các vị trí khác. Điều này có 2 lợi ích: Nó cho phép nhiều phục vụ chia sẻ việc tải các cung cấp của một dịch vụ đến những khách hàng truy nhập những tập hợp file giống nhau, làm tăng tính khả mở của dịch vụ và nó làm nổi bật khoảng sai cho có thể chấp nhận bởi sự cho phép các khách hàng định vị phục vụ khác để hiểu một bản sao của file khi bị lỗi.

Trong suốt hoá sự chuyển dời: Không có các chương trình khách hàng cũng không có người quản trị hệ thống tham gia vào các vị trí khách hàng cần được thay đổi khi các file được di chuyển. Sự cho phép tính di động các file hoặc có tính chung, tập hợp hoặc các nhãn của các file có thể bị di chuyển bởi các nhà quản trị hệ thống hoặc tính tự động.

Có vài đặc trưng không tìm thấy trong các dịch vụ file hiện thời quan trọng cho sự phát triển của các ứng dụng phân tán trong tương lai.

Hỗ trợ sự phân tán nhỏ dữ liệu: Cũng như sự tinh xảo của sự phát triển các ứng dụng phân tán, chia sẻ dữ liệu thành những đơn vị nhỏ sẽ trở nên cần thiết. Đây là một sự phản ánh nhu cầu định vị các đối tượng tác nhân gần các quá trình mà các quá trình này sử dụng và lưu trữ chúng một cách riêng lẻ trong các vị trí đó. Sự trừu tượng hoá file, mà nó được phát triển như một kiểu của việc lưu trữ thường trực trong các hệ tập trung không xác nhận nhu cầu.

Sự chấp nhận phân vùng mạng và xử lí được tách ra: Những phân vùng mạng có thể là kết quả của những thiếu sót, hoặc chúng có thể xảy ra một cách có tính toán, ví dụ khi một trạm có khả năng di chuyển được mang về. Khi một dịch vụ file bao gồm sự sao chép và lưu trữ các file, các khách hàng có thể bị ảnh hưởng khi phân vùng mạng xảy ra. Ví dụ, nhiều thuật toán sao chép yêu cầu phần lớn phần lớn mô hình để đáp ứng yêu cầu cho tất cả các bản sao hiện thời của một file. Nếu có một phân vùng mạng, một phần lớn có thể không khả dụng, ngăn cản khách hàng từ tiến trình.

  1. Chia sẻ bộ nhớ phân tán

Sự chia sẻ bộ nhớ phân tán (DSM) là một khái niệm trừu tượng sử dụng cho việc chia sẻ dữ liệu giữa các máy tính, nhưng không chia sẻ bộ nhớ vật lý. Các xử lý truy nhập bộ nhớ dùng chung phân tán cho quá trình đọc và cập nhật mọi thứ có mặt bên trong bộ nhớ hiện tại thuộc không gian địa chỉ bộ nhớ.

Đặc điểm chính của bộ nhớ dùng chung phân tán là nó không cần đến người lập trình nhúng vào các thông điệp khi đọc các ứng dụng, điều này là một trong những sức mạnh mà ta cần sử dụng bộ nhớ dùng chung phân tán. Bộ nhớ dùng chung phân tán là một công cụ chính cho các ứng dụng song song, hay các ứng dụng có sự phân tán, các nhóm ứng dụng mà trong đó các mục dữ liệu riêng biệt có thể được truy nhập trực tiếp. Bộ nhớ dùng chung phân tán nhìn tổng hợp thì ít thích hợp cho các hệ thống client-server, tuy nhiên server có thể cung cấp bộ nhớ dùng chung phân tán cho sự chia sẻ giữa các client.

Hệ thống bộ nhớ dùng chung phân tán quản lý các bản sao dữ liệu: Mỗi máy tính có một bản sao địa phương mà dữ liệu được cập nhật mới nhất được lưu vào trong bộ nhớ dùng chung phân tán tạo ra sự nhanh chóng cho tốc độ xử lí.

Bộ nhớ dùng chung phân tán là một lĩnh vực đã được nghiên cứu từ rất sớm vào những năm 1980. Một trong những thí dụ đầu tiên của sự thực thi bộ nhớ dùng chung phân tán là hệ thống tập tin Apollo Domain [Leach etal 1983], cái mà máy chủ thực hiện các xử lý là các tập tin chia sẻ từ các trạm làm việc khác nhau và chúng được ánh xạ hoàn toàn vào bên trong bộ nhớ. Thí dụ này là một hình thức chia sẻ bộ nhớ phân tán được thức hiện liên tục. Khi đó có thể tồn tại nhiều sự thi hành các xử lý hoặc một nhóm các xử lý mà cần truy cập vào hosted và chúng có thể được chia sẻ bởi một tập các xử lý khác nhau tại bất kỳ thời điểm nào.

Bộ nhớ dùng chung phân tán có ý nghĩa tạo ra một lớp bên cạnh sự phát triển của bộ nhớ, của các bộ vi xử lý có sự chia sẻ. Nhiều nghiên cứu đã đưa ra các kết quả phù hợp cho các quá trình xử lý song song trên nhiều bộ vi xử lý, và được sử dụng trong việc sử dụng phần cứng để lưu trữ và làm cực đại hoá số lượng các xử lí có thể duy trì liên tục bởi chúng [Dubois etal 1988]. Tuy nhiên trong thực tế giới hạn của sự chính xác vào khoảng 10 hay 20 xử lí. Nơi đây có sự kết nối đến các mô đun bộ nhớ trên một bus dùng

chung, sau đó lợi dụng thêm các xử lý phụ giúp cho các xử lý cho ra kết quả cuối cùng được nhanh chóng.

Các bộ nhớ của các bộ vi xử lý phân tán và các hệ thống mạng phân tán trên các nguồn khác nhau có phạm vi xử lý rất xa, bởi số lượng các xử lý hay các máy tính. Hiện nay các bộ vi xử lý có bộ nhớ chia sẻ thiết kế dùng các mô đun bộ nhớ chia sẻ nối lại với nhau bằng các hệ thống mạng tốc độ cao, cho phép các xử lí truy cập vào các không gian địa chỉ đơn giản. Một vấn đề trung tâm đã theo đuổi bởi một nhóm nghiên cứu bộ nhớ dùng chung phân tán và bộ vi xử lý là khả năng đầu tư vào bên trong tri thức của các thuật toán chia sẻ bộ nhớ và sự kết hợp với các phần mềm có thể tạm thời điều khiển nhiều hơn có thể làm thay đổi kiến trúc của bộ nhớ phân tán.

Thông điệp chuyển qua chống lại bộ nhớ dùng chung phân tán: Như một kỹ thuật truyền thông, bộ nhớ dùng chung phân tán có thể cho phép các thông điệp gửi qua khá hơn các yêu cầu cơ bản của sự truyền thông, cũng từ đây các ứng dụng song song sẽ được xử lí, trong từng xử lí có sự đòi hỏi phải sử dụng sự truyền thông không đồng bộ. Hệ thống bộ nhớ dùng chung phân tán và thông điệp gửi qua gần như là quá trình lập trình có thể tạo ra sự tương phản.

Liệu có hay không một bộ nhớ dùng chung phân tán được ưa chuộng với những thông điệp ngẫu nhiên cho các ứng dụng riêng biệt. Bộ nhớ dùng chung phân tán là một công cụ có nhiều triển vọng, nó có nền tảng phụ thuộc lên trên năng suất với những gì nó thi hành.

Hướng tiếp cận của bộ nhớ dùng chung phân tán: Có 3 hướng tiếp cận chính cho sự thực thi chia sẻ bộ nhớ phân tán. Điều này bao gồm quá trình sử dụng phần cứng, bộ nhớ ảo hay thư viện hỗ trợ. Lưu ý rằng chúng không nhất thiết phải mang các đặc trưng của nhau.

Nền tảng phần cứng: Một số kiến trúc vi xử lý như Dash [Lenoski etal 1992], PLUS [Birinai và Ravishankar 1990] liên kết các phần cứng để tạo ra các xử lý các quá trình truyền tải và lưu trữ áp dụng chế độ địa chỉ của bộ nhớ dùng chung phân tán, và truyền thông với các bộ nhớ từ xa như là một thứ yếu để mà thi hành chúng. Những thiết kế phân cấp bên trong các clusters của các mô hình bộ nhớ và các bộ xử lý thì được kết nối qua một mạng tốc độ cao. Điều này được tập trung vào các xử lý ở các vị trí khác có tầm quan trọng hơn những xử lý thông thường với giới hạn là 10 hay nhiều hơn thế, chúng có thể cung cấp nhiều trên một đường bus phổ biến. Bộ vi xử lí mô hình mẫu bản sao của Dash có 64 nút.

Có thể nhìn bộ nhớ dùng chung phân tán đang trình bày tương ứng như với các byte đối tượng chia sẻ hay các mục dữ liệu không thể biến đối được.

Byte định hướng: Byte định hướng trên bộ nhớ dùng chung phân tán có thể được truy nhập như một bộ ảo thông thường.

Các đối tượng chia sẻ: Một thuận lợi trong việc kiểm tra có hiệu quả việc chia sẻ bộ nhớ là có thể xem bộ nhớ như một tập hợp của nhiều đối tượng, mà quá trình đồng bộ hoá có thể được ứng dụng tại các cấp độ hoạt động của đối tượng. Orca nhìn tổng quan bộ nhớ dùng chung phân tán như một tập hợp của nhiều đối tượng được chia sẻ và tự động xếp theo thứ tự hoạt động theo các đối tượng đã được quy định.

Dữ liệu bất định: Cả 2 Agora và Linda nhìn bộ nhớ dùng chung phân tán như một tập hợp của nhiều mục dữ liệu bất định, mà mọi quá trình xử lý đều có thể được đọc. Các xử lí phải thay thế các mục dữ liệu trong bản thân chúng.

(Hết phần 2)

Hệ phân tán (phần 1)

PHẦN I. TỔNG QUAN HỆ PHÂN TÁN

 

Định nghĩa: Hệ phân tán là một tập hợp của những máy tính tự trị được liên kết với nhau bởi một mạng máy tính, và được cài đặt phần mềm hệ phân tán.

Hệ phân tán được thực hiện trên nền phần cứng, mà sự thay đổi kích thước từ một vài trạm làm việc được kết nối với nhau bởi mạng cục bộ tới mạng internet – một tập hợp liên kết khắp nơi của mạng cục bộ và mạng diện rộng liên kết hàng nghìn hoặc thậm chí hàng triệu máy tính với nhau.

            Phạm vi ứng dụng của hệ phân tán từ việc cung cấp những thuận lợi cho việc tính toán đa mục đích, đến những nhóm người dùng để tự động hóa công việc ngân hàng và hệ thống truyền thông đa phương tiện, và chúng bao quát toàn bộ những ứng dụng  thương mại và kỹ thuật.

            Những đặc trưng riêng biệt chính của hệ phân tán là hỗ trợ cho việc chia sẻ nguồn tài nguyên, tính mở, điều khiển tương tranh, mức độ tin cậy, khả năng chịu lỗi và mức trong suốt.

            Một hệ phân tán bao gồm tập hợp các máy tính tự trị được liên kết với nhau bằng một mạng máy tính và được trang bị một phần mềm hệ phân tán. Phần mềm hệ phân tán cho phép máy tính có thể phối hợp các hoạt động của nó và chia sẻ nguồn tài nguyên của hệ thống, phần cứng, phần mềm và dữ liệu. Người sử dụng của một hệ phân tán được thiết kế tốt có thể nhận thức được những thuận lợi của việc tính toán, mức độ tính toán tích hợp đơn thậm chí nó có thể được thực hiện bởi nhiều máy tính ở nhiều vị trí khác nhau.

            Sự phát triển của hệ phân tán tạo sự nổi bật của mạng lưới máy tính cục bộ tốc độ cao vào đầu những năm 1970. Gần đây , tính có lợi của việc thi hành cao của máy tính cá nhân, những trạm làm việc và các máy tính phục vụ đã mang lại kết quả trong việc thay đổi hướng của hệ thống phân tán, cách xa những máy tính trung tâm và máy tính đa người sử dụng. Xu hướng này đã được tăng nhanh hơn bởi sự phát triển của phần mềm hệ phân tán,  được thiết kế để hỗ trợ cho sự phát triển của những ứng dụng phân tán.

            Hệ phân tán đã trở thành tiêu chuẩn cho việc tổ chức những thuận lợi  về mặt tính toán. Nó có thể được sử dụng cho việc thực hiện tương tác hệ thống tính toán đa mục đích trong kiểu UNIX, và được hổ trợ trong phạm vi rộng rải của thương mại và ứng dụng công nghiệp của máy tính. Hiện nay, hệ phân tán đang được gia tăng mức độ sử dụng như là cơ sở cho những ứng dụng mới trong vùng làm việc, như là dịch vụ thông tin mạng máy tính và ứng dụng đa phương tiện khi việc truyền thông là một yêu cầu cơ bản

            Trong tất cả những vai trò này, hệ phân tán có khả năng cung cấp những thuận lợi quan trọng đối với người sử dụng nó. Những thuận lợi mà nó mang đến không phải thực hiện một cách tự động, nó phụ thuộc vào sự thiết kế cẩn thận của những thành phần hệ thống.

 

 

 

 

 

 

 

PHẦN II. TÀI NGUYÊN TRONG HỆ PHÂN TÁN

 

  1. Các nguồn tài nguyên và chia sẻ tài nguyên

Tài nguyên là một thành phần quan trọng trong bất kỳ một hệ thống nào. Trong hệ phân tán tài nguyên càng chiếm một vị trí quan trọng. Đặc biệt việc chia sẻ tài nguyên là một đặc tính cơ bản của các hệ thống phân tán.

Các nguồn tài nguyên có thể là các thiết bị phần cứng như: các ổ đĩa, máy in, máy fax.., các thực thể phần mềm như: Các tập tin, windows, cơ sở dữ liệu và các đối tượng dữ liệu khác.

Người sử dụng hệ thống máy tính tập trung và phân tán đều đã quen thuộc với lợi ích của việc chia sẻ tài nguyên mà họ có thể dễ dàng bỏ qua, không thấy được tầm quan trọng của việc chia sẻ tài nguyên. Lợi ích của việc truy cập được chia sẻ vào hệ thống lưu trữ đơn giản bao gồm cơ sở dữ liệu, chương trình, tư liệu và những thông tin khác đã được thừa nhận đầu tiên trong hệ thống đa người dùng, hoặc hệ thống chia sẻ thời gian ở đầu thập kỷ 60, và hệ thống UNIX đa người dùng vào những năm 1970.

Thiết bị phần cứng như: máy in, các ổ đĩa và thiết bị ngoại vi khác được chia sẻ để thuận tiện trong việc sử dụng và giảm giá thành.

Chia sẻ dữ liệu là một nhu cầu cần thiết trong rất nhiều ứng dụng của máy tính.

Người phát triển phần mềm làm việc theo nhóm, có thể cần truy nhập đến mỗi trạm làm việc khác và có thể chia sẻ những công cụ phát triển, yêu cầu duy nhất một phiên bản đơn của bộ biên dịch, trình soạn thảo, thư viện thủ tục và trình gỡ rối. Bất cứ khi nào một công cụ phát triển mới hoặc một phiên bản mới của trình biên dịch được cài đặt, tất cả mọi người sử dụng ngay lập tức truy cập được.

Rất nhiều những ứng dụng thương mại cho phép người sử dụng truy cập vào những đối tượng dữ liệu dùng chung trong cơ sở dữ liệu đơn hiện hành.

Một miền mở rộng với tốc độ cao của các ứng dụng cho các mạng, và các hệ phân tán được sử dụng cho các máy tính hỗ trợ người dùng làm việc theo nhóm trong các dự án hợp tác, ban quản trị, hướng dẫn từ xa và rất nhiều những tác vụ khác. Máy tính được hỗ trợ làm việc hợp tác (CSCW, luôn được biết đến như một phần mềm nhóm) phụ thuộc rất nhiều vào sự chia sẻ của các đối tượng dữ liệu giữa các chương trình chạy trên những trạm làm việc khác nhau.

Nguồn tài nguyên của những máy tính đa người dùng thông thường chia sẻ cho tất cả người sử dụng, nhưng người sử dụng của những trạm làm việc đơn, người sử dụng trong mạng và những máy tính cá nhân thì không thu được lợi ích gì trong việc chia sẻ tài nguyên này.

Những nguồn tài nguyên trong một hệ phân tán là phần vật lý thì được gói gọn trong phạm vi của một máy tính và chỉ có thể được truy cập từ những máy tính khác bằng truyền thông. Để việc chia sẻ tài nguyên hiệu quả, mỗi tài nguyên phải được quản lý bằng một chương trình, mỗi chương trình đó cung cấp một giao diện truyền thông cho phép tài nguyên được truy cập, sử dụng và cập nhật một cách thuận tiện và nhất quán.

  1. Quản trị tài nguyên

Quản trị tài nguyên cũng có lúc được hiểu như là một mô đun phần mềm quản lý một tập những tài nguyên đặc biệt. Mỗi loại tài nguyên này yêu cầu một vài chính sách và phương pháp quản trị riêng biệt, nhưng vẫn luôn luôn có nhưng yêu cầu chung. Điều này bao gồm cả sự phân chia bản đồ tên cho mỗi lớp của nguồn tài nguyên, cho phép được truy cập những nguồn tài nguyên riêng biệt từ bất kỳ vị trí nào bằng cách ánh xạ tên nguồn tài nguyên thành địa chỉ truyền thông, và điều phối những truy cập hiện hành có thay đổi trạng thái của những nguồn tài nguyên dùng chung đúng thứ tự và nhất quán.

III. Hai mô hình chia sẻ tài nguyên

Một hệ phân tán được tạo nên từ một tập tài nguyên của những nhà quản trị và một tập những chương trình tài nguyên người sử dụng. Tài nguyên của những người sử dụng giao tiếp với tài nguyên của những nhà quản trị để truy cập vào những nguồn tài nguyên dùng chung của hệ thống. Chúng ta có thể phát triển hệ phân tán theo hai mô hình: Mô hình Client/Server và mô hình hướng đối tượng.

Mô hình Client/Server.

 Được sử dụng nhiều nhất và được chấp nhận rộng rãi nhất cho các hệ phân tán. Mô hình này gồm một tập các tiến trình của server, mỗi hành động như một nguồn tài nguyên, người quản trị đưa ra các kiểu tập hợp của các nguồn tài nguyên, và một tập các tiến trình client, mỗi hành động là một tác vụ yêu cầu truy nhập vào những nguồn tài nguyên dùng chung như phần cứng hoặc phần mềm. Tài nguyên người quản trị có thể cần truy cập tới chính các nguồn tài nguyên dùng chung được quản trị bởi một tiến trình khác của người quản trị đó, vì vậy một số tiến trình là tiến trình của cả client và server. Trong mô hình client/server, mọi nguồn tài nguyên dùng chung được quản trị bởi những tiến trình của server. Những tiến trình client yêu cầu server bất cứ khi nào client cần truy cập tới những nguồn tài nguyên của server. Nếu yêu cầu hợp lệ thì server sẽ thực hiện yêu cầu và gửi hồi âm cho tiến trình client.

Mô hình client/server mang lại hiệu quả cho việc chia sẻ thông tin, và những tài nguyên trong hệ phân tán. Mô hình này có thể được thi hành trong rất nhiều môi trường phần cứng và phần mềm khác nhau. Một mạng  máy tính chạy các tiến trình client/server có thể có nhiều loại, và không có sự phân biệt giữa chúng, cả tiến trình client và server có thể chạy trên cùng một máy tính. Thật vậy, một tiến trình server sử dụng dịch vụ của server khác, xuất hiện như một máy client sau đó.

Trong mô hình client/server này mỗi tiến trình cung cấp những nguồn tài nguyên mà nó quản trị.

Mô hình client/server rất có hiệu quả trong hệ thống hiện hành với những dịch vụ, nó quản lý rất nhiều kiểu nguồn tài nguyên dùng chung như: Thư điện tử, tin nhắn, file, đồng hồ đồng bộ trong mạng diện rộng, đĩa lưu trữ, máy in, truyền thông trên diện rộng và thậm chí hiển thị trong những không gian cửa sổ trên màn hình của từng máy mạng. Nhưng nó không thể hữu dụng cho tất cả những nguồn tài nguyên còn lại của máy tính như: RAM, bộ vi xử lý trung tâm và giao diện mạng cục bộ thường có hiệu quả sử dụng tài nguyên rất thấp. Những nguồn tài nguyên cơ bản này được quản trị riêng biệt bởi một hệ điều hành trên mỗi máy tính, chúng có thể chia sẻ chỉ giữa các tiến trình định vị trên cùng một máy tính.

Mô hình hướng đối tượng.

 Trong mô hình này mỗi tài nguyên cần chia sẻ được xem như một đối tượng. Đối tượng đó được định danh duy nhất, có thể di chuyển trong hệ thống mà không cần thay đổi định danh. Bất cứ khi nào, một chương trình sử dụng tài nguyên yêu cầu truy cập nguồn tài nguyên thì nó gửi một message chứa yêu cầu đến đối tượng tương ứng. Một message là một tin nhắn gửi đi gần như là một thủ tục hoặc một tiến trình thực hiện những yêu cầu mà hồi đáp là những tiến trình yêu cầu nếu được chấp nhận.

Không như mô hình client/server, mô hình hướng đối tượng thực thi cả việc truy cập tài nguyên người sử dụng và tài nguyên người quản trị. Trong mô hình client/server bản đồ tên được sử dụng cho những nguồn tài nguyên phụ thuộc vào dịch vụ quản trị chúng. Nhưng trong mô hình hướng đối tượng những nguồn tài nguyên người sử dụng có thể được xem như là tất cả những nguồn tài nguyên cùng loại.

Chúng ta có thể sử dụng thuật ngữ quản trị đối tượng như là một tập hợp của những thủ tục và những giá trị dữ liệu đặc trưng cho một lớp đối tượng.

Trong quá trình hoạt động, mô hình hướng đối tượng phát sinh một vài vấn đề khó khăn. Yêu cầu một đối tượng quản trị của một kiểu liên quan phải được định vị bất cứ khi nào một đối tượng trong đó được định vị, vì những đối tượng nằm trong một trạng thái biểu diễn của chúng và người quản trị phải được định vị liên hợp với một đối tượng được sắp xếp truy cập trong trạng thái của chúng. Điều này dễ hiểu khi những đối tượng không thể di chuyển và vài hệ phân tán được thiết kế để hỗ trợ những đối tượng địa chỉ đồng nhất được tạo ra.

(Hết phần 1)

Đề thi Hệ Phân Tán K48

Đề K48

Đề chẵn
1. Trình bày nguyên lý và so sánh các mô hình di trú mã.
2. Trình bày về các khái niệm name, address, identifier, namespace.
3. Giải thích các tính chất ACID (Automic, Consistent, Isolated, Durable) của các giao tác phân tán
Đề lẻ
1 Trình bày phương pháp triệu gọi đối tượng từ xa (roi) sử dụng trong hệ phân tán
2 Phân giải tên là gì và nó đuợc thực hiện thế nào
3 So sánh mô hình nhất quán chặt và mô hình nhất quán tuần tự trong hệ phân tán

GỢI Ý:

câu 1 Đề chẵn K48 : Trình bày nguyên lý và so sánh các mô hình di trú mã. ( đã có trong đề K47 )

Câu 2 để chẵn K48 : Trình bày về các khái niệm name, address, identifier, namespace.

Có rất nhiều từ dùng để xác định một thực thể đó là: tên (name), địa chỉ (address), định danh (identifier), tên thân thiện (Human-friendly name).
•   Tên (name): là xâu các bit hoặc kí tự dùng để tham chiếu đến một thực thể trong hệ phân tán.
•   Địa chỉ (address): khi truy cập đến thực thể ta sử dụng điểm truy cập (access point). Các điểm truy cập này cũng phải được đặt tên và tên đó chính là địa chỉ của nó. Như vậy địa chỉ của thực thể chính là tên của điểm truy cập thực thể tương ứng.
•   Định danh (Identifiers): đây cũng là một kiểu tên đặc biệt. Việc định danh một tên phải thỏa mãn ba tính chất sau:
–   Mỗi thực thể chỉ được tham chiếu bởi duy nhất một định danh ID
–   Mỗi ID tham chiếu tới một thực thể.
–   ID đó không được gán cho một thực thể khác
Không gian tên (Name Space ) :Tập hợp tất cả các từ dùng để xác định thực thể gọi là không gian tênNếu xét về mặt hình học thì đây là một đồ thị có hướng, gồm các nút và các cung, gọi là đồ thị tên (naming graph). Đồ thị có cấu trúc: Mỗi nút lá miêu tả một một thực thể. Mỗi nút directory gắn với nhiều nút khác; lưu trữ trong bảng directory, bảng này là tập các cặp (label,indetifier).
Tên thân thiện (Human-friendly name): là các tên được đặt một cách dễ hiểu, thân thuộc với con người

Giao tác là gì? Giao tác phân tán là gì, để làm gì?so sánh các giao tác phân tán

Giao tác là một đơn vị công việc( bao gồm nhiều lệnh ) riêng lẻ, hay còn gọi là một nguyên tử công việc . Mỗi giao dịch có nhiều bước ( nhiều lệnh ) mỗi lệnh phải thành công thì giao tác mới thành công
Giao tác có 4 tính chất đó là :
Tính nguyên tử (atomic ) : mọi giao tác không thể phân chia nhỏ thành các giao tác nhỏ hơn. Nếu giao tác không thành công thì hệ thống sẽ trở lại trạng thái trước khi giao tác bắt đầu.
Tính nhất quán ( consistent ) : giao tác không xâm phạm các bất biến của hệ thống. Có nghĩa là trước khi giao tác thực thi các bất biến hệ thống như thế nào thì sau giao tác các bất biến đó vẫn giữ nguyên. ví dụ trong ngân hàng , khi có một giao dịch nội bộ thì sau giao dịch đó tổng số tiền trong ngân hàng vẫn giữ nguyên. Tuy nhiên trong quá trình giao dịch thì số tiền đó có thể bị thay đổi , nhưng nó lại ẩn nếu đứng ở ngoài giao dich. — ( tương tự như giao tác )
Tính cô lập ( isolated ) : các giao tác đồng thời không gây trở ngại cho nhau . Nghĩa là các giao tác cùng chạy mỗi thời gian thì ko gây ra ảnh hưởng cho nhau , ko thay đổi giao tác khác
Tính lâu bền (Durable): khi giao tác đã cam kết thì các thay đổi đối với nó không phải là tạm thời mà là kéo dài . Ví dụ khi một giao tác cam kết , thì trong trường hợp mất điện nó ko bị mất đi mà khi có điện thì nó sẽ dc khôi phục lại

Giao tác phân tán là giao tác thực hiện đc trên nhiều cơ sở dữ liệu và nhiều câu lệnh có thể thực thi trên cùng một cơ sở dữ liệu trong cùng một thời điểm

So sánh các giao tác : Có 3 loại giao tác là Limition of Flat Transaction ( giao tác phẳng ),Nested Transaction ( giao tác lồng ) ,Distributed Transaction ( giao tác phân tán )

a.   Giao tác phẳng: Là loại giao tác đơn giản và được dùng nhiều nhất thỏa mãn 4 tính chất nguyên tử, nhất quán, độc lập, và bền bỉ như kể trên.
+Ưu điểm: Đơn giản và được dùng nhiều nhất.
+Nhược điểm: Chính bản thân tính chất nguyên tử khiến cho giao tác phẳng không cho phép một phần kết quả được hoàn thiện độc lập hoặc là bị bỏ qua. Giảm hiệu năng của hệ thống.
b.   Giao tác lồng: Giao tác lồng có cấu trúc là một tập hợp các giao tác con được phân cấp. Giao tác trên cùng là giao tác cha nó có thể được thực thi song song với các giao tác khác và được chia nhỏ hơn, các giao tác nhỏ hơn này cũng có thể được thực hiện song song và lại được chia tiếp.
+Ưu điểm: Giao tác lồng có thể thực hiện tính chất chồng sâu giúp nâng cao hiệu quả của hệ thống.
+Nhược điểm:
Tuy nhiên nó cũng có nhược điểm nhỏ nhưng rất quan trọng là nếu tính huống sảy ra như sau các giao tác con được diễn ra song song , một trong các giao tác con đó đưa ra kết quả trước cho giao tác trên cùng, sau khi tính toán giao tác trên cùng hủy bỏ và đưa trạng thái hệ thống về thời điểm ban đầu trước khi giao tác lồng thực hiện. Vì vậy các giao tác con còn lại sẽ bị dừng và không được hoàn thành.
Tính chất bền bỉ của giao tác lồng chỉ được áp dụng cho tầng trên cùng cũng là một hạn chế.
c.   Giao tác phân tán: Giao tác phân tán bản chất là một giao tác phẳng có cách hoạt động hợp lý, giao tác mà không thể phân chia được và được thực hiện trên dữ liệu phân tán.
+Nhược điểm: Bản chất là giao tác phẳng nên nó cũng có một số yếu điểm giao tác phẳng.
+Ưu điểm: Là một sự lựa chọn thích hợp cho hệ phân tán.

Câu hỏi 2: Trình bày nguyên lý điều khiển tương tranh và so sánh 2 loại điều khiển tương tranh bi quan và lạc quan?
1.   Nguyên lý điều khiển tương tranh:
+Là quá trình điều khiển giúp cho nhiều giao tác diễn ra đồng thời mà không sảy ra tranh chấp.
+Có 2 loại điều khiển:
(1)   Điều khiển bi quan.
(2)   Điều  khiển lạc quan.
2.   So sánh
a.   Điều khiển bi quan:
+ Là phương pháp điều khiển với quan điểm “Nếu một sự kiện có khả năng sai thì nó sẽ sai”. Vì vậy để thực hiện phương pháp này người ta thực hiện đồng bộ bằng tem thời gian trước khi tiến hành thực hiện giao tác.
+Ưu điểm: Với phương pháp này đảm bảo độ tin cậy cao, thích hợp với hệ thống tải lớn.
+Nhược điểm: Sẽ tạo ra thời gian trễ(deadlock) vì các tiến trình phải chờ đợi, làm hiệu quả của hệ thống không cao.
b.   Điều khiển lạc quan:
+Là  phương pháp điều khiển với quan điểm “Nói chung tất cả mọi sự kiện đều đúng”. Với phương pháp này người ta thực hiện đồng bộ sau khi thực hiện thành công giao tác.
+Ưu điểm: Giải phóng thời gian trễ (deadlock), các tiến trình được xử lý luôn không phải chờ, làm nâng cao hiệu năng của hệ thống.
+Nhược điểm: Đôi khi gây ra lỗi giao tác phải thực hiện lại, với hệ thống tải lớn thì phương pháp này là không thích hợp.

Các mô hình nhất quán

Nhất quán cuối cùng (eventual consistency)
ĐN : Là mô hình nhất quán mà khi 1 dữ liệu có nhiều bản sao thì khi thực hiện cập nhật thì tất cả các bản sao phải giống nhau (cùng được cập nhật).
Ưu điểm :
đảm bảo khả năng trong suốt caoà    o   Thực hiện tốt
o   Rẻ, dễ thực hiện.
Nhược điểm
o   Yêu cầu các client thực hiện cập nhật thường xuyên
o   Khi các client di chuyển khó thực hiện
o   Thường chỉ áp dụng cho những hệ thống có ít người cập nhật

Nhất quán đọc đều (monotonic – read consistency)
ĐN : “Là mô hình nhất quán mà khi 1 tiến trình đọc giá trị 1 mục dữ liệu x, phải đảm bảo rằng thao tác đọc trên x luôn trả về cùng 1 giá trị hay là 1 giá trị gần đấy nhất”
Nói cách khác, nếu 1 tiến trình nhận được giá trị của x ở thời điểm t thì tại thời điểm sau t, nó sẽ không nhận được giá trị cũ hơn của x tại thời điểm t.
Ví dụ : hệ thống CSDL mail. Thư điện tử có thể thêm vào mailbox ở bất cứ đâu. Một người đọc thư điện tử ở A (coi như không xóa thư). Khi người đó đến B và mở mailbox thì những thư trong mailbox ở A cũng phải nằm ở trong maibox khi được mở tại B.

Nhất quán ghi đều (monotonic – write consistency)
   ĐN : Là mô hình nhất quán mà 1 tiến trình ghi lên 1 mục dữ liệu x được hoàn thành trước khi bất kỳ quá trình ghi nào khác trên x bởi cùng 1 tiến trình.
Mô hình này tương tự như nhất quán FIFO trong mô hình hướng dữ liệu, tuy nhiên nó chỉ liên quan đến 1 tiến trình chứ không phải nhiều tiến trình đang cùng thực hiện.
Nói cách khác, với mô hình này, khi 1 tiến trình ghi thực hiện, nó phải đảm bảo rằng mọi tiến trình ghi trước nó (về mặt thời gian) phải được hoàn thành. Mô hình nhất quán này được áp dụng trong những hệ thống mà quá trình ghi có thể bị thay thế và việc thực hiện tuần tự quá trình ghi không được đảm bảo. (vd : việc cập nhật lên 1 bản sao của thư viện, mọi bản cập nhật trước đó phải được thực hiện trước)

Nhất quán đọc kết quả ghi (Read – your – write consistency)
    ĐN : “Tác động của một thao tác ghi của một tiến trình lên mục dữ liệu x sẽ luôn được nhìn thấy bởi một thao tác đọc lần lượt trên x của cùng tiến trình đó”
Nói cách khác, 1 quá trình ghi luôn hoàn thành trước khi trước khi 1 quá trình đọc của cùng tiến trình thực hiện bất kể việc đọc diễn ra ở đâu.
Ưu điểm : Đảm bảo người dùng luôn nhận được kết quả mới nhất
Nhược điểm : Khi thực hiện ghi (cập nhật), có thể người dùng không thể truy cập được dữ liệu (vd:việc thay đổi password của 1 tài khoản thư viện) hay khi bộ đệm ko có hiệu lực (truy cập Web)

Nhất quán ghi theo sau đọc (write – follow – read consistency)
ĐN : “Tác động bởi một thao tác ghi của một tiến trình lên mục dữ liệu x theo sau 1 quá trình đọc trước đó của cùng 1 tiến trình được đảm bảo xảy ra trên giá trị mới nhất đã được đọc”
Nói cách khác, một quá trình ghi của 1 tiến trình trên mục dữ liệu x sẽ được thực hiện trên 1 bản sao của x được cập nhật với giá trị đọc gần nhất bởi tiến trình đó.
Ưu nhược điểm : bó tay, chả biết nói thế nào
Gớm: Khó hiểu và trừu tượng thì vô đối  confused confused confused

* Những người dùng chỉ đọc bài báo (article) không cần bất cứ mô hình nhất quán hướng client cụ thể nào cả.

Câu hỏi : Nguyên lý nhất quán và nhân bản? Phân tích (so sánh)  các mô hình nhất quán lấy dữ liệu làm chung tâm?

Trả lời
1.   Nguyên lý nhất quán và nhân bản:
Trong hệ phân tán có 2 lý do để sử dụng bản sao:
+Thứ nhất dùng bản sao để tăng độ tin cậy và tính sẵn sàng của hệ thống.
+Thứ 2 dùng bản sao để tăng hiệu năng  của hệ thống.
Tuy nhiên việc sử dụng bản sao cũng phải trả giá, đó là tính nhất quán dữ liệu của hệ thống bị suy giảm. Do sử dụng bản sao nên có thể xảy ra trường hợp có sự thay đổi trên một dữ liệu mà không cập nhật trên các bản sao của nó. Điều này gây ra các sai sót trong hệ thống. Nguyên lý nhất quán và nhân bản được đưa ra cung cấp:
(1)   Các mô hình nhất quán.
(2)   Các giao thức phân phối .
(3)   Các giao giao thức nhất quán.
+ Có một mâu thuẫn là tính nhất quán càng cao thì hiệu năng của hệ thống càng thấp vì vậy khi thiết kế hệ phân tán cần cân nhắc kỹ.

2.   Phân tích ưu nhược điểm của các mô hình nhất quán lấy dữ liệu làm trung tâm:
+ Các mô hình nhất quán lấy dữ liệu làm trung tâm:
(1)   Mô hình nhất quán chặt.
(2)   Mô hình nhất quán tuần tự.
(3)   Mô hình nhất quán tuyến tính.
(4)   Mô hình nhất quán nhân quả.
(5)   Mô hình nhất quán FIFO.
(6)   Mô hình nhất quán yếu.
(7)   Mô hình nhất quán đi ra.
(8)   Mô hình nhất quán đi vào.
+ Phân tích các mô hình trên:
(1)   Mô hình nhất quán chặt:
+Là một mô hình nghiêm ngặt phải thỏa mãn điều kiện sau: Thao tác đọc bất kỳ trên mục dữ liệu x đều trả về một giá trị tương ứng với kết quả của thao tác ghi gần nhất trên x đó. Để đảm bảo điều kiện này người ta phải làm sáng tỏ khái niệm thao tác ghi gần nhất tức là phải đưa ra định nghĩa về thời gian tuyệt đối. Thời gian tuyệt đối này phải bao quát tổng thể hệ thống.
+Ưu điểm: Mô hình đưa ra đảm bảo cho tính nhất quán lý tưởng, và dễ hiểu.
+Nhược điểm: Mô hình trên dựa vào khái niệm thời gian tuyệt đối cho toàn bộ hệ thống phân tán là không thể thực hiện được. Vì tất cả các quá trình đọc ghi được phân tán trên rất nhiều máy khác nhau có vị trí địa lý khác nhau mặt khác lại có sự trễ trên đường truyền…Vì vậy đây chỉ là mô hình nguyên lý không thể thực hiện với hệ phân tán thực tế.
(2)   Mô hình nhất quán tuần tự:
+ Mô hình tuần tự có điều kiện cần phải thỏa mãn như sau: “kết quả của bất kỳ sự thực thi nào cũng phải giống nhau, như thể tất cả các hành động đọc, ghi dữ liệu là của mọi tiến trình và được thực thi theo một thứ tự nào đó. Hành động đọc ghi của mỗi tiến trình riêng biệt xuất hiện trong thứ tự đó là do chương trình của chính nó quyết định.” . Có nghĩa là khi mà các tiến trình được diễn ra đồng thời trên các máy khác nhau mà có sự xen ngang của hành động đọc ghi dữ liệu thì tất cả các tiến trình đều nhìn thấy hành động đó.
+Ưu điểm: Trong điều kiện của mô hình không nhắc đến khái niệm  trước sau về thời gian tuyệt đối khắc phục được nhược điểm không thể thực thi của mô hình nhất quán chặt chẽ.
+Nhược điểm: Chính vì sự định nghĩa thứ tự của các hành động đọc ghi của mỗi tiến trình chưa có khái niệm tem thời gian nên nó không thật sự chặt chẽ, nên mô hình nhất quán này hơi yếu.
(3)   Mô hình nhất quán  tuyến tính:
+Là mô hình thỏa mãn điều kiện sau: “ kết quả của bất kỳ sự thực thi nào cũng phải giông nhau như thể tất cả các hành động đọc, ghi dữ liệu là của mọi tiến trình và được thực thi theo một thứ tự nào đó. Hành động đọc ghi của mỗi tiến trình riêng biệt xuất hiện trong thứ tự đó là do chương trình của chính nó quyết định. Đồng thời quy định nếu Tsop1(x) < Tsop2(y) (Tsop1(x): là tem thời gian của hành động ghi học đọc trên dữ liệu x) thì op1(x) sẽ đứng trước op2(y) trong thứ tự”. Trong nhất quán tuyến tính thì việc lưu trữ dữ liệu cũng phải đảm bảo tính tuyến tính tuần tự.
+Ưu điểm: Việc sử dụng tem thời gian làm cho thứ tự xếp đặt tương đối chăt chẽ, và mô hình này được đánh giá mạnh hơn mô hình nhất quán tuần tự.
+Nhược điểm: Mô hình này tính nhất quán mạnh nhưng hiệu năng hệ thống lại không cao.
(Ưu điểm nhược điểm ở đây em bịa đấy, cao thủ nào hiểu sâu fix hộ cái).

Cam kết 3 pha:
– Thêm trạng thái PRECOMMIT
:
+ Khi tiến trình điều phối nhận được thông báo VOTE_COMMIT từ tất cả các tiến trình thành viên nó sẽ phát thông báo PREPARE_COMMIT tới tất cả các thành viên.
+ Các tiến trình thành viên ở trạng thái READY, khi nhận được thông báo PREPARE_COMMIT thì đáp ứng lại thông báo READY_COMMIT tới tiến trình điều phối.
+ Khi nhận được phản hòi READY_COMMIT từ tất cả thành viên trong nhóm, tiến trình điều phối sẽ phát thông báo GLOBAL_COMMIT và bước vào trạng thái COMMIT

– Khi tiến trình điều phối ở trạng thái PRECOMMIT, nếu thời gian timeout đã hết mà còn thành viên nào đó chưa phản hồi thì nó vẫn chuyển sang trạng thái COMMIT bởi vì nó đã chắc chắn được rằng thành viên đó đã đáp ứng bằng thông điệp VOTE_COMMIT trước khi bị lỗi. Và cuối cùng thì khi tiến trình thành viên lỗi được khôi phục nó cũng bước vào trạng thái COMMIT.
– Trạng thái PRECOMMIT còn đảm bảo một tiến trình thành viên luôn quyết định được bước chuyển của nó một cách an toàn
+ Khi tham vấn thành viên Q, Q chỉ ở trạng thái INIT khi và chỉ khi không có thành viên nào khác nằm ở trạng thái PRECOMMIT.
+ Nếu tất cả các thành viên P tham vấn đều ở trạng thái READY thì giao tác bị loại bỏ.
+ Khi P là một tiến trình lỗi được khôi phục lại, nếu tồn tại tiến trình thành viên khác ơ trạng thái READY thì trạng thái của P chỉ có thể là INIT, ABORT hoặc PRECOMMIT.
+ Nếu tồn tại một thành viên ở trạng thái PRECOMMIT thì các thành viên khác khi được khôi phục lại sẽ nằm ở một trong 3 trạng thái READY, PRECOMMIT và COMMIT

*Chú ý : cam kết 3 pha chỉ được đề cập nhiều trong lý thuyết còn thực tế cam kết 2 pha vẫn được sử dụng rộng rãi hơn. Cam kết 3 pha chỉ cho thấy khả năng chịu lỗi của hệ phân tán

Đề thi Hệ Phân Tán K47

Đề k47
Đề chẵn
Cau 1: Trình bày ngắn gọn về nguyên lý và so sánh các middleware truyền thông sử dụng trong HPT
Cau 2: Tem thời gian là gì và nó được sử dụng để đồng bộ hóa như thế nào trong HPT
Cau 3: So sánh phương pháp phục hồi lùi và phục hồi tiến trong HPT
Đề lẻ
Cau 1: Trình bày ngắn gọn về nguyên lý và so sánh các mô hình di trú mã trong HPT
Cau 2: Phân giải tên là gì? Nó được sử dụng như thế nào trong HPT.
Cau 3: So sánh các mô hình nhất quán chặt và nhất quán tuần tự trong HPT

Câu 1 đề K47 ( đề chẵn ):
Như chúng ta đã biết, mạng máy tính hiện nay được xây dựng dựa theo mô hình phân tầng OSI, gồm bảy tầng với các nhiệm vụ chức năng khác nhau.
Trong hệ phân tán, người ta gộp tầng thứ năm và thứ sáu (tầng phiên và tầng trình diễn) thành một tầng mới gọi là tầng middle ware. Vì vậy ta cũng phải xây dựng các giao thức tương ứng cho tầng middleware này.
Có 4 mô hình dịch vụ middleware phổ dụng mà ta sẽ xét lần lượt sau đây:
–   Gọi thủ tục từ xa RPC (Remote Procedure Call).
–   Triệu gọi đối tượng từ xa (Remote Object Invocation)
–   Middleware hướng thông điệp (Message – oriented Middleware)
–   Middleware hướng dòng (Stream – oriented Middleware)
So sánh:
+Giống nhau : đều là các middleware được sử dụng với mục đích tăng tính mềm dẻo, trong suốt và hiệu quả cho hệ thống, tạo giao diện và cung cấp dịch vụ tốt cho tầng vận chuyển phía dưới.
+Khác nhau:
1.rpc:Được sử dụng rộng rãi nhất ưu điểm là đơn giản, hướng tới sự trong suốt về truy cập. Tuy nhiên những tham chiếu thông qua việc gọi thủ tục từ xa là hạn chế.
2.roi:Bản chất là một rpc nhưng điều đặc biệt là nó hướng tới đối tượng phân tán. Điểm khác biệt chính với rpc là roi cung cấp các thủ tục rmi cho phép tham chiếu đối tượng trong toàn hệ thống thông qua các tham số thích hợp. Roi đảm bảo tính trong suốt cao hơn rpc.
3.Hướng thông điệp: Là mô hình mức cao hơn rpc, roi trong vấn đề giải quyết đồng bộ. Nó cung cấp các ứng dụng truyền thông vừa kiên trì vừa bất đồng bộ mà rpc,roi không đáp ứng được vì đòi hỏi tích hợp rất nhiều dữ liệu liên quan đến hệ thống thông tin.
4.Hướng dòng: Là một mô hình khác biệt so với 3 mô hình trên, hướng tới các dòng dữ liệu có mối quan hệ mật thiết về thời gian. Trong các ứng dụng đa phương tiện truyền thông hướng dòng sẽ ưu tiên được lựa chọn với việc đảm bảo chất lượng dịch vụ đặc thù của các dòng audio video.

Câu 2 Đề chẵn  K47

Tem thời gian là 1 phần dùng để đồng bộ đồng hồ logic (nghĩa là đồng bộ giữa các sự kiện với nhau).

a. Tem thời gian Lamport
Để đo thời gian tương ứng với sự kiện x thì ta gán một giá trị C(x) cho sự kiện đó và thỏa mãn các điều kiện sau:
Nếu A –> B trong cùng một tiến trình thì C(A) < C(B).
Nếu A và B biểu diễn tương ứng việc gửi và nhận một thông điệp thì ta có C(A)< C(B)
Với mọi sự kiện phân biệt (không có liên quan) thì C(A)<>C(B)
Ví dụ : trong sách, trang 257, nói đơn giản là : khi gửi thông điệp thì bên gửi gửi kèm theo nhãn thời gian của nó, nếu tại nơi nhận thời gian trên nhãn thông điệp lớn hơn thời gian tại nơi nhận thì chỉnh lại thời điểm nhận đó là (thời gian gửi+1) (ít nhất) để đảm bảo yêu cầu của thuật toán.

b. Tem thời gian Vector :
Giải thuật vector timestamp đưa ra một vetor timestamp VT(a) gán cho sự kiện a có thuộc tính là nếu VT(a) < VT(b) thì sự kiện là nguyên nhân của b.
Trong vector thời gian mỗi tiến trình Pi lưu giữ một Vi với giá trị N (các tiến trình khác nhau thì N khác nhau)
– Vi là số các sự kiện đã xảy ra tại Pi
– Nếu Vi[j] = k nghĩa là Pi biết đã có k sự kiện đã xẩy ra tại Pj
Yêu cầu: mỗi khi có sự kiện mới xảy ra ở tiến trình Pi thì phải tăng Vi và phải đảm bảo vector này được gửi cùng thông điệp suốt trong quá trình.
Nhờ đó bên nhận sẽ biết được đã có bao nhiêu sự kiện xảy ra tại Pi .Quan trọng hơn phía nhận sẽ báo cho biết là đã có bao nhiều sự kiện ở các tiến trình khác đã xảy ra trước khi Pi gửi thông điệp m.Nói cách khác timestamp VT của n nói cho bên nhận biết bao nhiêu sự kiện đã xảy ra trong các tiến trình khác trước m.
Luật cập nhật vector
– Thiết lập Vi[j] =0 với mọi j,i
– Sự kiện xảy ra ở Pi là nguyên nhân tăng Vi
– Pi gắn một timestamp t=V vào mọi thông điệp gửi đi
– Khi Pi nhân được một thông điệp có t nó sẽ thiết lập
Vi[j]=Max(Vi[j] ,t[j]) và tăng Vi
Ví dụ : không thấy có big grin big grin big grin

Vẫn là câu 2 đề chẵn K47:

5.2.1 Nhãn thời gian Lamport (Lamport timestamps).
Lamport đã đưa ra mô hình đồng hồ logic đầu tiên cùng với khái niệm nhãn thời gian.

a. Xét định nghĩa mối quan hệ “xảy ra trước” (–>)
Khi có A–> B : A xảy ra trước B thì tất cả các tiến trình trong hệ phân tán thỏa thuận sự kiện A xảy ra trước rồi đến sự kiện B.
A và B là hai sự kiện của cùng một tiến trình. Nếu A xảy ra trước B thì A–>B là đúng.
Nếu A là sự kiện bản tin được gửi bởi một tiến trình nào đó, còn B là sự kiện bản tin đó được nhận bởi một tiến trình khác thì quan hệ A–> B là đúng.
Quan hệ xảy ra trước có tính bắc cầu: A–> B , B–> C thì A–> C.

b. Tem thời gian (Time Stamps)
Để đo thời gian tương ứng với 4 sự kiện x thì ta gán một giá trị C(x) cho sự kiện đó và thỏa mãn các điều kiện sau:
B trong cùng một tiến trình thì C(A)èNếu A < C(B).
Nếu A và B biểu diễn tương ứng việc gửi và nhận một thông điệp thì ta có C(A)< C(B)
Với mọi sự kiện phân biệt (không có liên quan) thì C(A)<>C(B)

5.2.2 Vector thời gian (Vector Timestamps)
Giải thuật vector timestamp đưa ra một vetor timestamp VT(a) gán cho sự kiện a có thuộc tính là nếu Vtt(a) < VT(b) thì sự kiện là nguyên nhân của b.
Trong vector thời gian mỗi tiến trình Pi lưu giữ một Vi với giá trị N (các tiến trình khác nhau thì N khác nhau)
– Vi là số các sự kiện đã xảy ra tại Pi
– Nếu Vi[j] = k nghĩa là Pi biết đã có k sự kiện đã xẩy ra tại Pj
Yêu cầu: mỗi khi có sự kiện mới xảy ra ở tiến trình Pi thì phải tăng Vi và phải đảm bảo vector này được gửi cùng thông điệp suốt trong quá trình.
Nhờ đó bên nhận sẽ biết được đã có bao nhiêu sự kiện xảy ra tại Pi .Quan trọng hơn phía nhận sẽ báo cho biết là đã có bao nhiều sự kiện ở các tiến trình khác đã xảy ra trước khi Pi gửi thông điệp m.Nói cách khác timestamp VT của n nói cho bên nhận biết bao nhiêu sự kiện đã xảy ra trong các tiến trình khác trước m.
Luật cập nhật vector
– Thiết lập Vi[j] =0 với mọi j,i
– Sự kiện xảy ra ở Pi là nguyên nhân tăng Vi
– Pi gắn một timestamp t=V vào mọi thông điệp gửi đi
– Khi Pi nhân được một thông điệp có t nó sẽ thiết lập
Vi[j]=Max(Vi[j] ,t[j]) và tăng Vi

 

 

Câu 3 đề chẵn K47

Phục hồi là các phương pháp đưa trạng thái bị lỗi sang trạng thái lành (fault free). Có hai cách tiếp cận cho phục hồi lỗi: phục hồi lùi (back forward) và phục hồi tiến (forward recovery).
Phục hồi lùi: khi thực hiện phục hồi lùi sẽ thực hiện phục hồi trạng thái lành của hệ thống trước khi có lỗi và cho hệ thống chạy lại từ điểm đó. Để có thể thực hiện được điều này phải sử dụng các điểm checkpoint. Tại các điểm này sẽ sao lưu trạng thái hiện hành của hệ thống để khi khôi phục sẽ cho chạy ở điểm checkpoint gần nhất. Việc thực hiện theo phương pháp này là rất tốn kém.
Phục hồi tiến: chuyển hệ thống từ trạng thái lỗi sang trạng thái mới với các thông tin để tiếp tục thực hiện

Câu 1 đề lẻ K47 (  Trình bày ngắn gọn về nguyên lý và so sánh các mô hình di trú mã trong HPT)

Di trú mã thực chất là di trú tiến trình để tăng hiệu năng và  độ linh hoạt của hệ thống.
Một tiến trình bao gồm :
– phần mã ( code segment ) : chứa các tập lệnh tiến trình đang thực hiện
– phần tài nguyên ( source segment ) : chứa tất cả các tham chiếu tài nguyên bên ngoài mà tiến trình đang cần.

Tham khảo hình vẽ của khóa K47
ĐN về di trú strong và weak (nói thế cho dễ viết) trong vở, không nói lại nữa. Đặc điểm
– Di trú weak dễ thực hiện, dùng cho những tiến trình bình thường
– Di trú strong yêu cầu di chuyển cả execution –> khó và phức tạp. Di trú strong dùng cho những tiến trình “không thể dừng” (vd: hệ thống D’Agents – ai thích thì đọc sách)

2 loại này lại chia ra là khởi tạo phía gửi (initiated-sender) và khởi tạo phía nhận (initiated-receiver). Bản thân tên cũng là tính chất của nó rồi, 1 bên là việc bắt đầu tiến trình di trú là do phía gửi (upload, search) còn 1 bên là do phía nhận (applet).
– Khởi tạo phía nhận : đơn giản hơn
– Khởi tạo phía gửi : cần thực hiện liên kết giữa nơi gửi-nhận –> vấn đề đảm bảo đường truyền và bảo mật cao hơn.

Từ đây chia nhỏ làm 2 loại nữa (giữa target process-seprate process và migrate process-clone process tương tự nên chỉ nói 1 cái)
– Migrate : là thực sự di trú 1 tiến trình đến 1 máy khác để thực hiện (máy gửi không thực hiện tiến trình nữa)
– Clone : sao chép code, segement, execution đến 1 máy khác và tạo 1 bản sao của tiến trình, tiến trình giữa 2 máy chạy song song với nhau, thường dùng để tăng tính trong suốt của hệ phân tán.

Cau 2 Đề lẻ K47 : Phân giải tên là gì? Nó được sử dụng như thế nào trong HPT.

mệt quá đi ăn cơm tí nữa chơi gái về pọt tiếp ( Nhắn anh em chia mỗi ng một chương tự nghĩ câu hỏi rồi post lên cho đội support trả lời )

Để hiểu về phân giải tên cần hiểu 2 khái niêm sau :
Tên (name): là xâu các bit hoặc kí tự dùng để tham chiếu đến một thực thể trong hệ phân tán.
Định danh (Identifiers): đây cũng là một kiểu tên đặc biệt. Việc định danh một tên phải thỏa mãn ba tính chất sau:
–   Mỗi thực thể chỉ được tham chiếu bởi duy nhất một định danh ID
–   Mỗi ID tham chiếu tới một thực thể.
–   ID đó không được gán cho một thực thể khác.

Quá trình tìm kiếm tên trong không gian tên được gọi là phân giải tên (name resolution). Quá trình phân giải tên trả về định danh một nút.

Trông hệ phân tán thì người ta sử dụng 3 kĩ thuật tìm kiếm tên là :
1. Closure machanism
2. Linking
3.Mounting
Và có 2 phương pháp chính để phân giải tên là :
1. Cách 1: phân giải tên tương tác (interactive name sesolution),việc phân giải tên thực hiện bằng cách truyền và nhận qua lại giữa client và các name server ở các mức khác nhau. Theo cách này thì các server không trao đổi trực tiếp với nhau, mỗi server chỉ phân giải nhãn tương ứng với lớp để xác định địa chỉ của server tiếp theo, kết quả trả lại cho client là địa chỉ của name server tiếp theo, và việc liên kết với server tiếp theo là do client đảm nhiệm. ( hình vẽ xem trong chương 4 bản dịch của K48 )
2.Cách 2: phân giải tên đệ quy (recursive name resolution), theo cách này thì mỗi name server sẽ gửi kết quả đến name server tiếp theo mà nó tìm thấy. Và cứ như vậy cho đến khi hoàn thành phân giải toàn bộ đường dẫn.
( hình vẽ xem trong chương 4 bản dịch của K48 )

Cau 3 Đề lẻ K 47: So sánh các mô hình nhất quán chặt và nhất quán tuần tự trong HPT

Mô hình nhất quát chặt là mô hình thỏa mãn các điều kiện sau :
– Thao tác đọc bất kì trên mục dữ liệu  x đều trả về một giá trị tương ứng với kết quả của thao tác ghi gần nhất trên x
(Sử dụng khái niệm thời gian tuyệt đối, nó là tổng thể cho cả hệ thống để xác định đúng khái niệm gần nhất)

Mô hình nhất quán tuần tự là mô hình thỏa mãn các điều kiện sau :
– Kết quả của sự thực thi bất kì là như nhau nếu thao tác đọc và ghi do các tiến trình  thực hiện trên mục dữ liệu một cách tuần tự và các thao tác mỗi tiến trình phải xuất hiện trong chuổi thao tác này phải theo thứ tự đã được chỉ ra trong chương trình của nó
( Các tiến trình chạy đông thời trên các máy khác nhau thì cho phép sự đan xen của các thao tác tuy nhiên tất cả các tiến trình phải nhận biết dc sự đan xen của các thao tác đó là như nhau )

So sánh :
– Giống nhau : Đều là sự thỏa thuận giữa các tiến trình và việc lưu trữ dữ liệu , các tiến trình phải chấp nhận theo một quy luật.
– Khác nhau :
+ 1. Nhất quán tuần tự thì các quy tắc rằng buôc lỏng lẻo hơn so với nhất quán chặt chẽ –> lập trình viên dễ sử dụng hơn, quản lý tốt hơn
+ 2. Nhất quán chặt chẽ ko thực tế , còn nhất quán tuần tự thì được áp dụng nhiều nơi
+ 3. Nhất quán chặt chẽ sử dụng kiểu thời gian tuyệt đối cho sự truy cập các tiến trình và các thao tác của từng tiến trình, nhất quán tuần tự chỉ sử dụng thứ tự đã báo trước của dữ liệu và các thao tác tiến trình dc chỉ trong chương trình

Hệ Điều Hành Phân Tán Chorus (Phần cuối)

Phần 6: Quản lý bộ nhớ trong Chorus

Quản lý bộ nhớ trong Chorus vay mượn nhiều ý tưởng từ Mach. Tuy nhiên, nó cũng chứa một số ý tưởng không có mặt ở Mach hiện tại. Trong phần này chúng ta sẽ mô tả những khái niệm cơ bản và cách thức chúng được sử dụng.

6.1. Vùng và phân đoạn (Regions and Segments)

Các khái niệm chính đằng sau quản lý bộ nhớ trong Chorus là các vùng (region) và các phân đoạn (segment). Vùng (region) A là một dãy liên tiếp các địa chỉ ảo, ví dụ, 1024-6143. Về lý thuyết, một vùng có thể bắt đầu ở bất kỳ địa chỉ ảo và kết thúc tại bất kỳ địa chỉ ảo, nhưng để làm bất cứ điều gì hữu ích, một vùngcần được liên kết trang và có chiều dài bằng với một số số nguyên của các trang. Tất cả các byte trong vùng phải có các đặc tính bảo vệ như nhau (ví dụ, chỉ đọc). Vùng là một tài sản của các tiến trình, và tất cả các thread trong một tiến trình xem cùng một vùng. Hai vùng trong tiến trình tương tự có thể không trùng lặp.

Phân đoạn (segment) A là một tập tiếp giáp các byte được đặt tên và được bảo vệ bởi một khả năng. Tập tin và trao đổi các khu vực trên đĩa là những loại phổ biến nhất của các phân đoạn. Phân đoạn có thể được đọc và viết bằng cách sử dụng các cuộc gọi hệ thống cung cấp khả năng của phân đoạn, số byte, bộ đệm, và việc chuyển giao. Các cuộc gọi được sử dụng để thực hiện họat động truyền thống I/O trên các tập tin.

6.2. Ánh xạ (Mappers)

Chorus hỗ trợ trang bên ngoài kiểu Mach, được gọi là mappers. Mỗi mapper điều khiển một hoặc nhiều phân đoạn đó được ánh xạ vào khu vực. Phân đoạn có thể được ánh xạ vào nhiều vùng, ngay cả trong không gian địa chỉ khác nhau cùng một lúc, như trong hình. 6.1. Ở đây các phân đoạn S1 và S2 là hai ánh xạ vào các quá trình A và B, trên cùng một máy nhưng tại các địa chỉ khác nhau. Nếu quá trình A ghi địa chỉ A1 nó thay đổi từ đầu tiên của S1. Nếu quá trình B sau đó đọc B1 nó cũng được các giá trị A đã viết. Hơn nữa, nếu S1 là một tập tin, khi cả hai quá trình chấm dứt, thay đổi sẽ được thực hiện trong các tập tin trên đĩa.

VMM  trong mỗi hạt nhân duy trì một bộ nhớ cache các trang và theo dõi những trang thuộc về phân đoạn. Các trang trong bộ nhớ cache nội bộ có thể thuộc về phân đoạn được đặt tên, chẳng hạn như các tập tin, hoặc để phân đoạn không tên, chẳng hạn như các khu vực trao đổi. Hạt nhân theo dõi thông tin các trang. Nó có thể loại bỏ các trang clean, nhưng phải trả lại các trang dirty đến mappers thích hợp để lấy lại không gian của nó.

Một giao thức giữa các hạt nhân và mapper xác định dòng chảy của các trang trong cả hai hướng. Khi một lỗi trang xảy ra, kiểm tra hạt nhân để xem các trang cần thiết được lưu trữ. Nếu không, hạt nhân sẽ gửi một thông điệp tới các mapper kiểm soát phân đoạn của trang yêu cầu (và các trang có thể liền kề cũng). Các thread bị treo sau đó được đình chỉ cho đến khi trang đến.

When the mapper gets the request, it checks to see if the needed page is in its own cache (in its own address space). If not, it sends a message to the thread managing the disk to perform I/O and fetch the page. When the page arrives (or if it was already present), the mapper notifies the kernel, which then accepts the page, adjusts the MMU page tables, and resumes the faulting thread.

Khi mapper các nhận được yêu cầu, nó kiểm tra xem các trang cần thiết có trong bộ nhớ cache riêng của mình không (trong không gian địa chỉ riêng của mình). Nếu không, nó sẽ gửi một thông điệp tới các thread quản lý các ổ đĩa để thực hiện I /O và tìm nạp các trang. Khi trang đến (hoặc nếu nó đã được trình bày), mapper các thông báo hạt nhân, mà sau đó chấp nhận các trang, điều chỉnh các bảng trang MMU, và hồ sơ các thread bị treo.

Hình 6.1 Phân đoạn được ánh xạ tới không gian địa chỉ trong cùng thời điểm

Phần 7: Sự kiện phần cứng và xử lý ngoại lệ (Hardware Event & Exception)

Các Nucleus Chorus cung cấp thiết bị đơn giản cho phép các tác nhân người dung sử dụng phương án xử lý ngoại lệ của riêng mình. Ngoài ra, Chorus hỗ trợ hiệu năng cao và xử lý các sự kiện ngoại lệ đối với các hệ thống con có nhu cầu hỗ trợ trực tiếp các thiết bị phần cứng cũng như thời gian thực ứng dụng.

7.1 Mắc kẹt, Ngoại lệ, và Ngắt (Traps, Exceptions, and Interrupts)

Trap là các cuộc gọi có chủ đích tới hạt nhân hoặc một hệ thống con để gọi dịch vụ. Chương trình gây trap bằng cách gọi hệ thống như gọi một thủ tục thư viện. Hệ thống hỗ trợ hai cách xử lý bẫy. Trong cách đầu tiên, tất cả các bẫy trong một vector bẫy cụ thể đi đến một thread của hạt nhân duy nhất mà vector đã sẵn sàng để xử lý. Trong cách thứ hai, mỗi vector bẫy được gắn với một loạt các thread hạt nhân, với tác nhân giám sát Chorus sử dụng nội dung của đăng ký tới thứ tự trong mảng để lấy ra thread. Cơ chế thứ hai cho phép tất cả các cuộc gọi hệ thống sử dụng các vector cùng một bẫy, với số lượng cuộc gọi vào hệ thống sẽ được đăng ký

Ngoại lệ (Exception) là sự kiện bất ngờ, xảy ra do tai nạn, như trường hợp chia cho số không, tràn dấu chấm động, hoặc lỗi một trang. Nó có thể sắp xếp cho một thread hạt nhân để dẫn đến xử lý các ngoại lệ. Nếu bộ xử lý có thể hoàn thành việc xử lý, nó sẽ trả về một mã số đặc biệt và xử lý các trường hợp ngoại lệ là xong. Nếu không (hoặc nếu không có xử lý hạt nhân được chỉ định), hạt nhân trì hoãn các thread đó gây ra các ngoại lệ và gửi một thông điệp tới một cổng ngoại lệ xử lý đặc biệt liên quan đến tiến trình của thread. Thông thường, một số tiến trình khác sẽ được chờ đợi một thông điệp trên cổng nà. Nếu không có cổng ngoại lệ tồn tại, các thread đứt đoạn, bị hủy.

Ngắt (Interrupts) được gây ra bởi sự kiện không đồng bộ, như ve đồng hồ hoặc hoàn thành một yêu cầu I/O. Chúng không nhất thiết liên quan đến bất cứ điều gì các thread hiện tại đang làm. Thay vào đó, nó có thể sắp xếp trước khi ngắt xảy ra trên một vector gián đoạn nhất định (ví dụ, một thiết bị cụ thể), một thread hạt nhân mới sẽ được tạo một cách tự nhiên để xử lý nó. Nếu một gián đoạn thứ hai xuất hiện trên cùng một vector trước khi cái đầu tiên đã chấm dứt, một thread thứ hai được tạo ra, và như vậy. Tất cả các I / O ngắt trừ đồng hồ được xử lý theo cách này. Đồng hồ là được giám sát bời chính nó, nhưng nó có thể được thiết lập để thông báo cho người dùng một thread nếu muốn. Ngắt đề có thể gọi chỉ một tập hữu hạn các dịch vụ hạt nhân do hệ thống đang ở trong một trạng thái không rõ khi chúng được bắt đầu. Các hoạt động chúng có thể làm trên semaphores và mutexes, hoặc gửi minimessages tới miniports đặc biệt.

7.2 Xử lý ngoại lệ cơ bản

Trong hình thức đơn giản của nó, các Nucleus Chorus cung cấp cơ chế cho phép người sử dụng hoặc hệ thống kiểm soát các sự kiện ngoại lệ. Một thread có thể yêu cầu để kết hợp cổng với trường hợp ngoại lệ xảy ra với một tác nhân. Khi Nucleus phát hiện một trường hợp ngoại lệ và tác nhân có một cổng được giao cho công việc, nó sẽ gửi một thông điệp đến cổng đó, mô tả điều kiện ngoại lệ. Thread lắng nghe trên cổng này sau đó có thể tùy hành động phù hợp để đưa ra ngoại lệ.
Nếu không có cổng đã được chỉ định, trường hợp ngoại lệ gây ra treo các thread được tạo ra cho các ngoại lệ.

7.3 Tác nhân giám sát ngoại lệ

Đối với các tác nhân giám sát (supervisor actor), Chorus cung cấp các cơ sở bổ sung hệ thống, theo đó có thể truy cập trực tiếp sự kiện cấp thấp I/O và các sự kiện ngoại lệ phần cứng để đáp ứng nhu cầu. Tác nhân giám sát hỗ trợ một cơ chế ngắt thiết bị từ phần cứng đến thread người sử dụng.

Khi ngắt xảy ra, tác nhân giám sát giữ trạng thái của thread bị gián đoạn và thự chiện liên tục các cuộc gọi theo thứ tự ưu tiên người dùng kết hợp với ngắt. Sau khi trình tự cuối cùng đã hoàn thành, tác nhân giám sát có thể bắt đầu gia hạn.

Phần 8: So sánh hệ điều hành phân tán Chorus với Ameoba & Mach

Trong phần này chúng ta sẽ xem xét điểm chung và khác giữa ba hệ điều hành phân tán.

8.1 Quan điểm (Philosophy)

Amoeba, Mach và Chorus có lịch sử khác nhau và triết lý khác nhau. Amoeba được thiết kế từ đầu như một hệ thống phân tán để sử dụng trên một tập của các CPU được kết nối bởi mạng LAN. Sau đó, bộ đa xử lý và WAN đã được thêm vào. Mach bắt đầu ra như là một hệ điều hành cho một bộ xử lý duy nhất, với bộ đa xử lý và mạng LAN được thêm vào sau đó. Chorus bắt đầu như một dự án nghiên cứu điều hành hệ thống phân tán khá xa với UNIX, và đã đi qua ba phiên bản chính, mỗi lần lại gần gũi hơn với UNIX. Các hệ quả của các nền tảng khác nhau có thể thấy trong các hệ thống.

Một khác biệt tiếp liên quan đến “microkernel”. Quan điểm Amoeba theo châm ngôn nổi tiếng do phi công Pháp và nhà văn Antoine de St Exupery giải thích: Sự hoàn hảo đạt được không phải khi ko còn gì để thêm vào, mà là khi ko còn gì để bỏ đi”. Triết lý này đã dẫn đến một hạt nhân tối thiểu, với hầu hết các mã trong các máy chủ sử dụng cấp người dùng.
Các nhà thiết kế Mach, ngược lại, muốn cung cấp đủ chức năng hạt nhân để xử lý các phạm vi rộng nhất có thể có của các ứng dụng. Ở nhiều vùng, Amoeba có một cách để làm điều gì đó và Mach có chứa hai hoặc ba, thuận tiện hơn và hiệu quả trong những hoàn cảnh khác nhau. Do đó, hạt nhân Mach là lớn hơn năm lần các cuộc gọi hệ thống (bao gồm cả các cuộc gọi tới thread hạt nhân). Chorus chiếm một vị trí trung gian giữa Amoeba và Mach, nhưng nó vẫn có hệ thống các cuộc gọi hơn 4,2 BSD UNIX, đó là rất khó cho một microkernel. Một so sánh được đưa ra trong hình 10.1.

System Kernel calls
Amoeba 30
Version 7 UNIX 45
4.2 BSD 84
Chorus 112
Mach 153
SunOS 165

Hình 8.1 Số lần cuộc gọi tới hạt nhân

8.2 Đối tượng (Objects)

Trong cả ba hệ thống, các đối tượng được đặt tên, địa chỉ, và được bảo vệ. Trong Amoeba, khả năng (capabilities) được quản lý trong không gian người sử dụng và bảo vệ bởi chức năng này. Capabilities cho hệ thống các đối tượng được xác định (ví dụ, tiến trình) và cho các đối tượng người dùng định nghĩa (ví dụ, thư mục) được đối xử một cách thống nhất và xuất hiện trong thư mục cấp người dùng để đặt tên và giải quyết tất cả các đối tượng.

Mach cũng có capabilities, nhưng chỉ cho cổng. Đây là những quản lý hạt nhân trong danh sách năng lực, mỗi tiến trình. Không giống như Ameoba, không có khả năng cho các tiến trình hoặc hệ thống khác hoặc các đối tượng người dùng định nghĩa, và không thường được sử dụng trực tiếp bởi các chương trình ứng dụng. Cổng capabilities được thông qua giữa các tiến trình một cách có kiểm soát, do đó, Mach có thể tìm thấy chúng bằng cách nhìn chúng trong bảng hạt nhân.

Chorus về cơ bản xây dựng các đối tượng giống như Mach, nhưng cũng sử dụng hệ thống năng lực của Ameoba cho phép các hệ thống con để xác định các đối tượng mới được bảo hộ. Không giống như Ameoba, Chorus không có một trường rõ ràng cho các quyền được  phép. Giống như các khả năng của Ameoba và không giống như của Mach, Chorus “có thể được truyền từ một tiến trình này tới tiến trình khác đơn giản bằng cách đưa chúng vào một thông điệp hoặc viết chúng vào một tập tin được chia sẻ.

8.3. Tiến trình (Processes)

Tất cả ba hệ thống hỗ trợ tiến trình với nhiều thread. Các thread được quản lý và theo lịch trình của hạt nhân, mặc dù thread cấp người sử dụng có thể được xây dựng trên nó. Amoeba không cung cấp cho người dùng điều khiển tạo thread, trong khi Mach và Chorus cho phép các tiến trình thiết lập các ưu tiên và chính sách của thread trong phần mềm. Mach cung cấp hỗ trợ đa phức tạp hơn so với hai hệ kia

Trong Amoeba và Chorus, đồng bộ hóa giữa các chủ đề được thực hiện bằng mutexes và semaphores. Trong Mach nó được thực hiện bởi mutexes và các biến điều kiện. Amoeba và Mach hỗ trợ một số hình thức biến tổng thể. Chorus sử dụng phần mềm đăng ký để xác định bối cảnh riêng của từng thread.

Amip, Mach, và Chorus tất cả các việc trên multiprocessors, nhưng chúng khác nhau về cách đối phó với các thread trên các máy. Trong Amoeba, tất cả các thread của một quá trình chạy trên cùng một CPU. Trong Mach tiến trình có quyền kiểm soát tốt hơn cho thread chạy trên CPU đó (bằng cách sử dụng khái niệm bộ vi xử lý). Do đó, các thread của cùng một tiến trình có thể chạy song song trên các CPU khác nhau.

Chorus hỗ trợ có nhiều thread trong một tiến trình duy nhất chạy trên các CPU khác nhau cùng một lúc, nhưng điều này được xử lý hoàn toàn bởi hệ điều hành. Không có sự can thiệp với người sử dụng để quản lý thread tới vi xử lý cấp phát, nhưng sẽ có trong tương lai.

Chorus cho phép một tiến trình được bắt đầu trên máy tính bất kỳ. Các bản sao UNIX cung cấp một cách để thiết lập các trạng thái mặc định.

8.4 Bộ nhớ (Memory Model)

Mô hình quản lý bộ nhớ Chorus được lấy chủ yếu từ Mach. Nó cũng có các đối tượng bộ nhớ (segments) có thể được ánh xạ tới.  Các trang nhu cầu này được kiểm soát bởi các trang bên ngoài (mapper), như trong Mach.

Amip, Mach, và Chorus tất cả các hỗ trợ bộ nhớ phân tán chia sẻ, nhưng theo nhiều cách khác nhau. Amoeba hỗ trợ chia sẻ các đối tượng được nhân rộng trên tất cả các máy sử dụng chúng. Đối tượng có thể có kích thước bất kỳ và có thể hỗ trợ bất kỳ hoạt động.

Mach và Chorus, ngược lại, hỗ trợ một bộ nhớ phân tán dựa trên trang chia sẻ. Khi một thread hỏi đến một trang không nằm trên máy của mình, trang đó được lấy từ máy hiện tại của nó và mang đến. Nếu có nhiều truy cập cùng một trang, xung đột có thể xảy ra.

8.5. Truyền thông (Communication)

Amoeba hỗ trợ cả hai giao tiếp RPC và nhóm truyền thông cơ bản. RPCs được địa chỉ tới các cổng, là các địa chỉ dịch vụ. Chúng được bảo vệ bằng cách sử dụng chức năng mã hóa một chiều. Việc gửi và nhận các máy có thể được ở bất cứ nơi nào. Giao diện RPC là rất đơn giản: chỉ có ba cuộc gọi hệ thống, không có bất kỳ tùy chọn.
Tin nhắn có thể được gửi đến nhóm bất kỳ với một sự bảo đảm đáng tin cậy. Ngoài ra, tất cả các thành viên trong nhóm thấy tất cả các thư đến theo thứ tự chính xác như nhau.

Ngược lại, truyền thông trong Mach là từ tiến trình tới cổng, chứ không phải từ tiến trình tới tiền trình. Hơn nữa, người gửi và cổng phải được đặt trên cùng một nút. Sử dụng một máy chủ mạng thông điệp. Mach không hỗ trợ truyền thông nhóm.
Thông điệp Mach có thể đơn giản hay phức tạp. Thông điệp đơn giản chỉ là các bit và không được xử lý bằng bất kỳ cách đặc biệt nào bời hạt nhân.

Truyền thông trong Chorus tương tự như Mach, nhưng đơn giản hơn. Thông điệp được chuyển đến cổng và có thể được gửi không đồng bộ hoặc sử dụng RPC. Mọi thông tin liên lạc Chorus được xử lý bởi hạt nhân, như trong Amoeba. Không gì giống như các máy chủ mạng thông điệp trong Chorus. Giống như Amoeba và không giống như Mach, một thông điệp Chorus có một tiêu đề cố định, có thông tin nguồn và đích, và một phần thân không định kiểu đó chỉ là một mảng các byte.

Chorus hỗ trợ quảng bá ở cấp độ hạt nhân nhưng theo một cách giống như Mach, tốt hơn như Amoeba. Các cổng có thể được nhóm lại với nhau trong các nhóm cổng, và thông điệp gửi đến tất cả các thành viên của một nhóm cổng (hoặc chỉ một). Không bảo đảm rằng tất cả các tiến trình hiểu các thông điệp theo đúng thứ tự, như trong Amoeba.

8.6 Máy chủ (Servers)

Amoeba có một loạt các máy chủ cho các chức năng cụ thể, bao gồm cả quản lý tập tin, quản lý thư mục, sao chép đối tượng, và cân bằng tải. Tất cả đều dựa trên các đối tượng và khả năng. Amip hỗ trợ nhân rộng các đối tượng thông qua các thư mục có chứa khả năng. Ví dụ như khi một file được mở, khả năng file đạt được và lưu trữ trong bảng mô tả file.

Mach có một máy chủ chạy BSD UNIX như là một chương trình ứng dụng. Nó cung cấp 100  phần trăm tương thích nhị phân, một lợi ích rất lớn cho việc chạy các phần mềm hiện tại mà mã nguồn không có sẵn.

Chorus cung cấp đầy đủ khả năng tương thích nhị phân với hệ thống V UNIX. Bản sao này được thực hiện bởi một tập các tiến trình (như Amoeba) chứ không phải bằng cách chạy UNIX như  một chương trình ứng dụng (như Mach). Tuy nhiên, một số trong các tiến trình này có chứa mã UNIX, như Mach và không giống như Amoeba. Cũng như trong amip, ví dụ, khi một tập tin được mở ra, một khả năng cho nó được nạp và được lưu trữ trong bảng mô tả tập tin.

Item Amoeba Mach Chorus
Designed for: Distributed system 1 CPU, multiprocessor 1 CPU, multiprocessor
Execution model Pool processor Workstation Workstation
Microkernel? Yes Yes Yes
Number of kernel calls 30 153 112
Automatic load balancing? Yes No No
Capabilities General Only ports General
Capabilities in: User space Kernel User space
Threads managed by: Kernel Kernel Kernel
Transparent heterogenity? Yes No No
User-settable priorities? No Yes Yes
Multiprocessor support Minimal Extensive Moderate
Mapped object Segment Memory object Segment
Demand paging? No Yes Yes
Copy on write? No Yes Yes
External pagers? No Yes Yes
Distributed shared memory Object based Page based Page based
RPC? Yes Yes Yes
Group communication Reliable, ordered None Unreliable
Asynchronous communication? No Yes Yes
Intermachine messages Kernel User space/kernel Kernel
Messages address to: Process Port Port
UNIX emulation Source Binary Binary
UNIX compatibility POSIX (partial) BSD System V
Single-server UNIX? No Yes No
Multiserver UNIX? Yes No Yes
Optimized for: Remote case Local case Local case
Automatic file replication? Yes No No

Hình 8.3 Một số so sánh về Amoeba, Mach, và Chorus.

Kết luận

Giống như Amoeba và Mach, Chorus là một hệ điều hành dựa trên microkernel để sử dụng trong các hệ thống phân tán. Nó cung cấp khả năng tương thích nhị phân với hệ thống UNIX V, hỗ trợ cho các ứng dụng thời gian thực, và lập trình hướng đối tượng.

Chorus bao gồm ba lớp khái niệm: lớp hạt nhân, các hệ thống con, và các quá trình người dùng. Lớp hạt nhân chứa các microkernel thích hợp, cũng như hạt nhân một số quy trình chạy trong chế độ hạt nhân và chia sẻ không gian địa chỉ của microkernel. Lớp giữa chứa các hệ thống con, được sử dụng để xây dựng hệ thống cung cấp hoạt động hỗ trợ cho các chương trình người dùng, mà nằm trong các lớp trên.

Microkernel cung cấp sáu trừu tượng chính: các tiến trình, luồng, các vùng, các thông điệp, cổng, các nhóm cổng, và định danh duy nhất. Tiến trình cung cấp một cách để thu và quản lý tài nguyên. Luồng là những đơn vị hoạt động trong hệ thống, và được lên kế hoạch bởi hạt nhân bằng cách sử dụng một lịch trình ưu tiên. Khu vực là các khu vực của không gian địa chỉ ảo có thể có các phân đoạn ánh xạ vào chúng. Cổng là vùng đệm được sử dụng để nắm giữ các thư gửi đến chưa được đọc. Định danh duy nhất là tên nhị phân được sử dụng để xác định nguồn tài nguyên.

Tài liệu hướng dẫn

1, Overview of the CHORUS Distributed Operating Systems_M. Rozier, V. Abrossimov, F. Armand, I. Boule, M. Gien, M. Guillemont, F. Herrmann, C. Kaiser

2, Distributed  Operating  Systems_Andrew  S.  Tanenbaum and  Robbert  Van  Renesse