1 tháng 4, 2010

Hỏi cuộc đời sinh ra hằng bao nhiêu tài năng đến thế ?


Hỏi cuộc đời sinh ra hằng bao nhiêu tài năng đến thế ? Và cực nhiều người luôn vênh vênh cho rằng mình ra tài năng...

Biết tiếng anh, biết kiến thức về IT, cho mình là pro, nói người khác là ko chuyên, thật nực cười.
trích dẫn lời 1 người :

Cụm từ xóa một phần tử trong mảng là không chính xác, mặc dù vẫn được dùng phổ biến với dân không chuyên IT.
Thực ra, đặc trưng cơ bản của mảng (array) là kiểu dữ liệu có số phần tử cố định, các phần tử có cùng một kiểu, được bố trí liền kề nhau trong RAM,..................

Về vẫn đề này thì như sau :
1. Công nhận cụm từ xóa 1 phần tử trong mảng thì về khía cạnh khoa học là ko đúng thật, nhưng về phía cạnh thực tế , các bài toán thực tế, đây là 1 vấn đề rất cụ thể và bình thường. Và sinh viên công nghệ ở việt nam gặp rất nhiều những câu nói,bài dạng này.

Nói được câu này thì chứng tỏ người này có hiểu biết khá nhưng..... 

2. Về IT, như đã nói ở bài trước 
Information technology (IT), as defined by the Information Technology Association of America (ITAA), is "the study, design, development, implementation, support or management of computer-based information systems, particularly software applications and computer hardware." IT deals with the use of electronic computers and computer software to convert, store, protect, process, transmit, and securely retrieve information.

Theo điều này và kết luận ở câu 1 thì vấn đề về "chuyên IT" hay "không chuyên IT" là dùng ko chính xác, dùng như thế khác gì xúc phạm 1 số người khác trong 4rum?

3. "được bố trí liền kề nhau trong RAM"
Câu này thì chính xác được tầm 80% thôi. Tất cả các tài liệu , ko có tài liệu nào nói liệu nào có câu kết luận như thế cả, đều chỉ nói là liền kề nhau trong bộ nhớ , vì sao vậy ?
+ Trước khi vào main Function program xin 1 vùng memory từ bộ nhớ của system, mảng có thể được cấp phát trực tiếp trung vùng nhớ này, hoặc .... thì sẽ xin bộ nhớ trực tiếp từ system. 

+Nhưng bộ nhớ là 1 vấn đề phức tạp, bộ nhớ được system tổ chức 1 cách chặt chẽ. RAM là phần cứng chính nhưng ko phải là tất cả. Trong windows os có pagefile, trong linux/unix có swap...... 

ví dụ : trong linux/unix, khi ram sắp hết nó sẽ tiến hành đẩy "1 vài thứ" xuống swap , giả sử cái mảng của bạn nó trong thành phần được đẩy xuống, vậy lúc này có phải là trên ram ko ???? (quá trình này ngược với trong windows) (để vài viết này khỏi loãng thì tôi xin phép ko trình bày đậm sâu về vấn đề này)

Tức là việc mảng đôi khi lại nằm trên ... ổ cứng lại hoàn toàn bình thường , ko phải lúc nào cũng là RAM .....
Đó là lý do tại sao các tài liệu lại ko nói gì về mảng tổ chức trên RAM.




Mình cũng chả muốn bắt bẻ cái vấn đề "RAM or not" làm gì cả, vì đó là sự hiểu biết của bạn đó chứ chả liên quan gì đến mình cả, nhưng thấy cái bài viết của bạn đầy sự khinh thường và có vài động chạm đến langman nên mình mới care. 
(nghĩ hoangdinh tui học dốt tiếng anh lắm hả)









System quản lý hardware, và tạo nên 1 không gian nhớ ảo (an address space) (vậy thì nằm trong đây thì chắc chắn có địa chỉ rồi) . Program của bạn làm việc với system chứ ko làm việc với hardware (trừ 1 số trường hợp đặc biệt). 

Progame <=====> System <=====> Hardware

Virtual memory is a computer system technique developed at the University of Manchester, which gives an application program the impression that it has contiguous working memory (an address space), while in fact it may be physically fragmented and may even overflow on to disk storage.

The program thinks it has a large range of contiguous addresses; but in reality the parts it is currently using are scattered around RAM, and the inactive parts are saved in a disk file

bộ nhớ-không gian nhớ là do hệ điều hành tổ chức 1 cách chặt chẽ và khá phức tạp.



Bộ nhớ là 1 từ chung chung, ram, ổ cứng, usb-flash disk, đều là bộ nhớ và thuộc về hardware....

Nhưng cái ko gian nhớ, cũng được gọi là bộ nhớ mà hệ điều hành nó tạo ra là ảo, ko cầm được, ko nắm được, ko sờ được. Và để lưu trữ vật lý thì nó dùng ram là chính và 1 có sử dụng đến các thiết bị nhớ khác. App của chúng ta làm việc với cái này chứ ko làm việc với cái trên.


Còn việc khi 1 modum được gọi thì thông tin lại đẩy lên ram thì là việc của system xử lý , chứ ko phải app xử lý.

Tại sao khi đẩy lên, đẩy xuống thì địa chỉ của nó ko bị đổi ? đơn giản thì vì đó là địa chỉ của nó nằm trên ko gian nhớ trên chứ ko phải là địa chỉ nằm trong que RAM
ok?
Việc sử dụng các hardware như nào lúc này là thuộc về system, app của bạn ko tham gia quản lý.

Giả sử lúc đầu, trước khi vào main function program của bạn xin 1 khối memory xxx, xxx được system coi là nằm tại vị trị AB trên ko gian nhớ trên, lúc này RAM rảnh nhiều và nó được đưa vào vùng ram CD. vùng ram CD lúc này được cả 2 hiểu là xxx mà bạn cần. Đột nhiên process của bạn vẫn đang chạy thì có 1 process khác chạy,có độ ưu tiên cao hơn rất nhiê và xin rất nhiều vùng nhớ, nó chiếm dụng nhiều, process của bạn tạm thời bị đẩy xuống page file, giải phóng ram cho process kia chạy... dến lượt xử lý process của bạn thì các thông tin cần thiết lại được nạp lại vào ram,
Như vậy
+ địa chỉ vẫn là cố định (trên không gian nhớ) trên vật lý thì ko nói, nó là do system quản lý
+ Không phải 100% lúc nào cũng là trên ram!!



windows 7 32bit + VS2008pro sau khi dịch đoạn code

PHP Code:
#include "iostream" using namespace std;
void main()
{
     
int *p;
     
long i=0;
   
     while (
1)
     {
        
FILE *q=fopen("C:\\temp\\hoangdinh.txt","a+");
        
fprintf(q,"%ld \n",i);
        
fclose(q);
        
i++;
        
p=new int[4000];
        if (
p==NULL) break;
     }
}  
máy tôi chỉ có 2GB ram, chi phí cho các process khác của os chỉ còn tầm 1.4GB ram free, chửa tính đến VS chạy

Tôi chạy ct trên đến khi màn hình máy tôi bị tối lại , chuột vẫn di chuyển được (ct chưa kết thúc, chưa treo) , đành phải reset lại máy, lười đợi , cái số cuối cùng tôi thu được là trong file hoangdinh.txt là 6347874 ............. đó là tôi chưa đợi đến khi ct kết thúc
vậy cái vùng nhớ tôi xin cấp phát nó, .... ở đâu ? trên ram à ? ram tôi ko đủ free cho chỗ đó,......

Vậy không gian nhớ được system tổ chức và quản lý rất phức tạp,


 trong VS 2008/OS 32bit, con trỏ ko có loại near far ,chỉ có 1 loại con trỏ 4byte (không nói về kiểu dữ liệu) , ở đây để có khả năng trỏ tới toàn bộ không gian nhớ ảo ( 4GB ). 
và đây hoàn toàn là địa chỉ (phẳng) chứ ko phải địa chỉ phân đoạn .
nếu là địa chỉ phân đoạn , max== 0xffff ffff là trỏ đến 0xffff * f +0xffff vậy có quản lý nổi 4GB ko ?

Không có nhận xét nào:

Đăng nhận xét

Tìm kiếm Blog này