nói như bạn @Duong_Act thì @always.ask.question cần phải học thêm về cách thức hoạt động của hệ điều hành.
Thanh ghi (Register) là gì?
Cái em muốn hỏi đúng như anh @Duong_Act trả lời đấy ạ. Cám ơn các anh đã giúp đỡ em @Duong_Act @masoivn @nguyenthedan @tntxtnt
Lâu không vào diễn đàn, hôm nay mình xin kể cho các bạn một câu chuyện cổ tích nhé
###NHÀ THÔNG THÁI KHÙNG###
Ngày xửa ngày xưa, có một nhà thông thái khá kì dị. Ông có những sở thích và mong muốn khác người: ví dụ như tìm các số nguyên tố lớn hơn 1 tỷ, tính toán giải phương trình có 1 triệu ẩn số, … Mà làm những việc này đòi hỏi một thời gian và công sức rất lớn. Vì thế, ông mới nghĩ làm sao tạo ra một cái máy có thể làm được những việc như thế, có thể chạy lâu lâu cũng được, còn mình thì làm việc # .
Thế là, 2 thằng bé CPU và DATA ra đời. CPU lúc đầu chỉ là một hệ thống vận hành cơ và Data chỉ là các tấm bìa đục lỗ. CPU sẽ thao tác trên tấm bìa đó, đục khoét, + lỗ, move lỗ. Lỗ tương trưng cho bit hiện nay, đục có nghĩa là 1 và không đục có nghĩa là 0.
###TUỔI THƠ ẤU###
CPU và DATA cứ thế làm việc rất vui vẻ và ăn ý cho nhà thông thái khùng kia. Nhưng 2 đứa dần lớn dần, CPU giờ sử dụng hệ thống điện tử với mô phỏng bit bằng các bóng đèn bật tắt, còn DATA đã chuyển sang dùng hệ thống từ. Tuy nhiên, cách làm việc thì vẫn như thời sơ khai cả, nghĩa là DATA đưa dữ liệu cho CPU đục lỗ và DATA sẽ lưu các đống lỗ này vào đĩa mềm. Các công việc của nhà thông thái thời kỳ này cũng tương đối đơn giản, nên cả 2 thằng đều cảm thấy không có vấn đề gì cả.
Thế rồi CPU ăn nhiều nên lớn nhanh hơn DATA, nó thấy DATA thật chậm chạp, trong khi nó cần dữ liệu để qwety thì nó mãi chẳng thấy đâu. Chà chà, bực rồi nghen. Mặc dù, DATA đã làm mọi cách cho tốc độ của mình nhanh lên, như chuyển từ đĩa mềm sang đĩa cứng … nhưng chỉ được 1 thời gian ăn ý, thằng CPU nó cứ làm quá nhanh.
(đây là thời kỳ của các app chạy trực tiếp trên đĩa mềm, không hệ điều hành, không RAM … như mấy cái máy bốn nút nhà mình ấy)
###SỰ XUẤT HIÊN CỦA DRAM###
DATA nghĩ mãi, nghĩ mãi không biết cách nào để có thể “giao thông” với CPU nhanh nhất, chứ thao tác chậm thế này nhỡ nó chán, nó bỏ tìm em # thì buồn lắm. Vậy là nó nghĩ ra một cách, dữ liệu thì vẫn phải lưu ở ổ cứng rồi, nhưng khi nào cần dữ liệu thì DATA sẽ lôi trong “sách” ra và viết trước lên “tay”. Khi đó, CPU cần thì DATA đưa luôn được, chẳng cần phải ngồi quay tay tìm trong hàng ngàn trang sách, rồi mới đưa cho CPU, như vậy chậm chết. Vậy là DRAM ra đời (gọi là DRAM Dynamic RAM vì nó sử dụng nạp/thải của tụ để lưu trữ 0,1. Do đó để đồng bộ làm việc với CPU, nó cần có clock để phối hợp với CPU).
Clock (đồng hồ đếm) giúp CPU và RAM làm việc đồng bộ với nhau khi đưa dữ liệu cho nhau xử lý. Khi clock đếm 1 cái thì RAM đưa ra và CPU làm việc. CPU thực chất cũng giống như lúc sơ khai, cũng chỉ làm một vài lệnh đơn giản như move, dịch bits, … (họ nói CPU thực hiện hàng triệu phép toán 1s là nói tới các lệnh đơn giản này mà thôi).
###HỆ ĐIỀU HÀNH###
Dần dà, nhà thông thái nọ ngày càng giao nhiều việc cho 2 anh em làm. CPU thì ngày càng làm được nhiều việc trong 1 s hơn, còn DATA thì mở rộng bộ nhớ RAM để lưu dữ liệu to hơn, dài hơn. Tuy nhiên, có 1 điều khiến 2 anh em buồn lòng là ông nhà thông thái này nhiều lúc giao việc giống nhau nhưng lời nói lại # nhau, đãn đến 2 anh em toàn hiểu nhầm và bị đòn oan.
Thế là 2 anh em quyết định thuê 1 cô giúp việc OS. Cô OS trẻ đẹp nên hiểu ý nhà thông thái rất nhanh, và truyền đạt lại theo cách mà 2 đứa trẻ thơ hiểu được (chứ ông kia toàn nói ngôn ngữ người lớn). Đây chính là thời kỳ các OS đơn nhiệm, làm nhiệm vụ như 1 tầng trung gian giao tiếp với app và CPU. OS cung cấp 1 service để gọi API thống nhất, ví dụ như bật nhạc, chỉ cần playMusic, chứ k cần playMusicWalkman và playMusicCreative.
Thời gian trôi qua, cô giúp việc này còn nhận giúp việc cho vài ông goá vợ # nữa. Vậy làm sao giải quyết được tình trạng tranh nhau dùng đây. OS sử dụng giải pháp “timeslice”, nghĩa là sẽ giúp cho mỗi ông vài phút thôi, xong lại chuyển sang ông khác, kể cả chưa xong thì cũng để đấy tý làm. Đây là thời kỳ của OS multitask.
OS mltitask có một con chó tên là WatchDog và một cô em gái Scheduler để xếp lịch cho các ông, không có ông nào được dùng quá nhiều. Nếu chây ỳ, cho con chó WatchDog ra kill luôn. Ngoài ra, em gái Scheduler cũng chỉ cấp cho mỗi ông một “phòng nghỉ” cụ thể, cần nhiều mới được cấp thêm.
Lại nói về CPU và Data, khi được giao task từ OS Multitask xuống, hai anh em giờ quay tay liên tục, lúc với dữ liệu của ông thông thái, lúc dữ liệu của bá tước Mongto, lúc dữ liệu của Huân tước Cutonhuphich, … 2 anh em chóng hết cả mặt khi cứ phải xoá, ghi dữ liệu vào “tay”. Công việc thì nhiều nên sai lệch lung tung.
###THỜI THANH NIÊN###
OS Mutltask ngoài khái niệm WatchDog, Scheduler và Service, thì còn khái niệm Virtual Memory. Chả là, mỗi ông đòi “1 phòng nghỉ”, nhưng lại phải phòng nghỉ thân quen. À, đơn giản, cho vào “Phòng nghỉ”, giường giống nhau, sơn giống nhau, ông nào cũng tưởng là phòng cũ nên yên tâm hành sự ^^.
OS Multitask cũng ngày ranh ma hơn, từ việc quản lý ít phòng nhỏ (16 bit = 2^16) chuyển sang nhiều phòng (32 bit = 2^32) vẫn nhoay nhoáy (RAM được tổ chức theo hình thức đánh địa chỉ, ví dụ ô nhớ 255 sẽ được đánh là FF, giống như chúng ta oánh số nhà vậy. Mặc dù các ô nhớ giống nhau, nhưng để truy cập kiểu Random Access thì buộc phải đánh địa chỉ. Thực ra thì virtual memory cũng được đánh địa chỉ, chỉ là ông nào cũng tưởng địa chỉ của mình là 00 mặc dù địa chỉ thật là FF)
Lại nói về 2 anh em, càng lớn CPU qwety càng nhanh, 1 clock nó làm được cả ngàn cái lệnh trong khi DATA lại chỉ mới đưa được 1 clock. Lúc này SDRAM ra đời (synchronous) giúp cho việc “giao thông” trơn tru hơn, tất nhiên, không thể bằng vài GHz của CPU nhưng luôn là bội số của clock, ví dụ 133Mhz. giúp CPU chạy ở clock tối ưu.
###SRAM###
Càng ngày bản danh sách khách hàng của OS Multitask càng nhiều khiến cho DATA xoay xở không kịp cung cấp cho CPU. Chỉ riêng cái việc nạp lên / nạp xuống dữ liệu khi OS chuyển khách hàng (trong cái timeslice) khiến DATA bị overload. Dạo này CPU lại còn mọc thêm tay, thêm chân nên tốc độ ngày càng khiếp (multicore), đồng thời cũng học thêm được nhiều lệnh mới mẻ hơn (ví dụ lệnh cache, jump …).
CPU nghĩ mãi nghĩ mãi và cuối cùng nghĩ ra 1 cách, ghi trước dữ liệu lên ngón tay mình, vừa nhanh, vừa hiệu quả , gì chứ mình nhiều tay thế này, ngón tay đa số. Đây là lúc SRAM ra đời và được tích hợp trực tiếp vào CPU dưới dạng cache L1, cache L2, cache L3, cache L4. Khi cần load/save, CPU save trước vào cache, rồi mới lấy dữ liệu từ RAM chuyển vào. Khi hết timeslice, nó lại đọc từ cache cái data đã save ra mà không cần nhờ tới RAM nữa.
Vậy tại sao lại cần nhiều tầng cache vây? Vì SRAM sử dụng transitor lưu trữ 0,1 nên chi phí đắt, mỗi loại lại có mức đắt # nhau nên không thể làm to và dài như DRAM được. Khi hết cacheL1, nó phải save xuống L2, rồi L3, rồi L4, … Khi cần, CPU sẽ search từng tầng này để tìm dữ liệu cần (gọi là cache hit / miss). Ngoài ra, sau khi xử lý dữ liệu xong thành 1 dữ liệu mới, CPU cũng phải save vào đâu đó, nếu save vào cache thì gọi là cơ chế Load Store Architecture (để phân biệt với cơ chế Register Memory Architecture là save vào RAM khi thực hiện xong).
Ngoài ra, SRAM được tổ chức thành nhiều thanh ghi (cũng được đánh địa chỉ) vì CPU thực hiện lệnh với mỗi dữ liệu khác nhau, ví dụ như lệnh cộng với số nguyên bao giờ cũng nhanh hơn cộng với số thực. Thế nên, để tăng tốc cho phép cộng số thực thì thanh ghi chuyên cho số thực phải có tốc độ nhả dữ liệu nhanh hơn nhiều lần so với số nguyên. Ngoài ra, các CPU thế hệ mới 64 bits còn được thiết kế chạy đa luồng, luồng 1 xử lý số nguyên, luồng 2 xử lý số thực và thao tác trên các thanh ghi tương ứng. Trong con CPU này có cả Scheduler để xếp lịch chạy 2 luồng này sao cho hiệu quả (thế nên OS khi nhìn 1 con CPU multithread luôn nhầm tưởng là có 2 con, ví dụ mình có con CPU QuadCore thì OS sẽ hiển thị 4x2=8 CPU).
Xử lý số thực, hay còn gọi là floating-point operations per second (flops), đây là unit đánh giá khả năng chạy nhanh hay chậm của CPU.
Câu chuyện tạm dừng, tuy nhiên CPU và DATA và OS ngày càng lớn và # so với thời kỳ đầu (mặc dù IT mới chỉ phát triển tầm 20 năm, tức là chúng nó đang ở độ tuổi học Đại học). Tẹo nếu rảnh mình sẽ viết thêm một chút về các thanh ghi trong kiến trúc 8086 (EAX, EBX, ECX, EDX, ESI, EDI, DBP, ESP) ^^
Bài viết vội, có gì sai mong được lượng thứ và sửa đổi.
câu chuyện quá hay , đọc xong hình như mình gần hiểu về cấu trúc máy tính hết luôn
hình như virtual memory là mỗi ông đi thuê phòng là được cho “thuê” cả cái khách sạn luôn mà Nhưng ít ông nào xài hết cái khách sạn. Nếu có ông nào đòi xài hết cả cái khách sạn thì cô OS có thể sẽ đá đít mấy khách khác xuống đường, hoặc thu phòng mấy lão cứ thích chiếm phòng mà hiếm khi xài như Chrome ấy
, sau đó có thể mời mấy ông khách này từ dưới đường lên khách sạn lại nếu tới phiên mấy ổng
Cái này còn gọi là page fault. Lưu dữ liệu từ RAM xuống HDD, lôi dữ liệu từ HDD lên RAM lại. Cực kì chậm chạp.
mong chờ bài viết các thanh ghi trong 8086, mình đang bị lấn cấn cái chổ này ^^.
Như vậy thanh ghi là nhắc đến Ram thôi nhỉ, chứ chưa vào CPU.
Thanh ghi thì có nằm trên RAM đâu. Nó nằm trong CPU và các phần cứng khác.
cho em hỏi thanh ghi bộ đếm chương trình sẽ quyết định dung lượng lớn nhất của RAM hay ROM vậy
Của cả 2 tuỳ trường hợp. Đa phần là của ROM.
Hay quá anh ơi,anh ra phần Thanh ghi đi ạ
A ra thêm phần thanh ghi đi a