Thanh ghi là gì

Thanh ghi là gì

Cám ơn anh, lần sau em sẽ chú ý. Em đặt 2 câu hỏi như vây vì em thấy nó cũng liên quan đến nhau thôi ạ

always.ask.question:

lần sau em sẽ chú ý

Mình đang yêu cầu bạn tạo một topic khác với câu hỏi thứ 2.

*

Em vừa tạo rồi ạ, Link ở đây. Anh có câu trả lời thì giúp em ạ

*

Theo mình biết thì thanh ghi được dùng để giao tiếp giữa CPU và bộ nhớ trong, nó nhanh hơn bộ nhớ nhiều vì nó gần CPU hơn!

Khó nói quá, em hiểu nó để lưu các giá trị hoặc địa chỉ. Nhiều chỗ em không hiểu đó là trong 1 vi xử lý thì có nhiều bộ thanh ghi gồm các thanh (EAX, EBX, ECX, EDX, ESI, EDI, DBP, ESP) phải không ạ, khi mỗi chương trình chạy thì sẽ được hệ điều hành cấp 1 bộ để sử dụng đúng không anh?

register có thể hiểu là bộ nhớ gắn trực tiếp vào CPU. Bộ nhớ gián tiếp (secondary) thì có cache (nhiều tầng) rồi tới RAM rồi tới disks.

Bạn đang xem: Thanh ghi là gì

Vì gắn trực tiếp với CPU nên thao tác rất lẹ với các biến trên register. Tuy nhiên thì CPU chỉ hạn chế vài chục register, trong khi 1 chương trình có thể cần tới vài GB bộ nhớ nên phải cần tới RAM. Tuy nhiên đọc từ RAM vào register cũng rất chậm (so với register) nên phải thông qua nhiều tầng cache nữa, mỗi tầng đọc/ghi nhanh hơn vài lần.

Nếu ko đủ RAM thì có thể xài tạm disk, phải nói là cực kì cực kì chậm, có thể so sánh phóng đại lên là thời gian đọc từ RAM lên cache (cache miss) là 1 học sinh đi từ chỗ ngồi lên bảng (vài giây) viết với viết trực tiếp lên bảng (thao tác trực tiếp với register), còn thời gian đọc từ disk (HDD) lên RAM (page fault) thì có thể tương đương với việc xách xe đi đổ xăng rồi mua ổ bánh mì và quay lại chỗ ngồi (vài chục phút).

Em cám ơn. Anh cho em hỏi là trong 1 vi xử lý thì có nhiều bộ thanh ghi gồm các thanh (EAX, EBX, ECX, EDX, ESI, EDI, DBP, ESP) phải không ạ, khi mỗi chương trình chạy thì sẽ được hệ điều hành cấp 1 bộ để sử dụng đúng không anh?

có 1 bộ duy nhất vì CPU chỉ có 1, ở đây nhiều chương trình thay phiên nhau xài chung. Thay phiên như thế nào thì có liên quan tới (process) scheduling bên hệ điều hành.

nguyenthedan (Thế Dân) April 13, 2016, 5:34pm #12

e học điện tử số, vi xử lý chưa?

Duong_Act (Lão Hạc) April 13, 2016, 11:44pm #13

Em hiểu thế là sai rồi.Thanh ghi là đang nói đến cấu trúc phần cứng. Trên con vi xử lý, vi điều khiển…có một vùng nhớ đặc biệt. Trong vùng nhớ này mỗi bit, byte có giá trị ảnh hưởng trực tiếp đến hoạt động của chip hoặc chip sẽ dùng các byte đó trong tính toán. Tập hợp của một hay nhiều byte có cùng chức năng gọi là một thanh ghi. Nhà sản xuất sẽ phân biệt các thanh ghi với nhau bằng cách đặt tên cho nó. Do nó là cấu tạo của phần cứng nên số lượng là cố định và sẽ không có khái niệm hệ điều hành cấp thanh ghi cho ứng dụng.

1 Like
always.ask.question (Noob) April 14, 2016, 5:58am #14
nguyenthedan Thực ra em không học điện tử viễn thông anh ạ, em bên cntt tìm hiểu assembly thôi
tntxtnt Nếu thay phiên nhau dùng như vậy thì giá trị thanh ghi sao lưu và phục hồi như thế nào khi từ chương trình này chuyển sang chương trình khác vậy bác.
always.ask.question:

Nếu thay phiên nhau dùng như vậy thì giá trị thanh ghi sao lưu và phục hồi như thế nào khi từ chương trình này chuyển sang chương trình khác vậy bác.

Xem thêm: Nhớ Là Gì – Nghĩa Của Từ Nhơ Nhớ Trong Tiếng Việt

Thanh ghi là nơi lưu trữ giá trị trong lúc chạy trong cpu thôi nên không có vụ sao lưu và phục hồi.khi chạy xong chương trình thì thanh ghi đó được giải phóng và được dùng cho chươn trình khác.

1 Like
always.ask.question (Noob) April 14, 2016, 6:10am #16
masoivn
Duong_Act em ơn 2 bác, đó là chỗ em chưa rõ đấy ạ. Nếu 1 chương trình chạy xong thì không nói nhưng nếu ta chạy nhiều chương trình thì mỗi lần luân chuyển giữa các chương trình thì thanh ghi nó sẽ phải phục hồi lại giá trị cũ của chương trình đang chạy chứ nhỉ?

em nên đọc lại sách đi.thanh ghi chỉ biết lưu giá trị do cpu đưa cho. chứa không có vụ phục hồi giá trị cũ.

ví dụ: tính theo biểu thức (a+b)+(a +c)thì cpu sẽ lấy giá trị tương ứng để tính toán.sau khi chạy xong thì thanh ghi có thể lưu giá trị khác.

1 Like
tntxtnt (‏) April 14, 2016, 6:45am #18

keyword là CS (computer science)

context switch

* en.wikipedia.org
*

Context switch | Cost

Context switches are usually computationally intensive, and much of the design of operating systems is to optimize the use of context switches. Switching from one process to another requires a certain amount of time for doing the administration – saving and loading registers and memory maps, updating various tables and lists, etc. What is actually involved in a context switch varies between these senses and between processors and operating systems. For example, in the Linux kernel, context switc…

có save and load registers mà. Save xuống RAM hay cache gì đó, rồi phục hồi lại bằng cách load từ RAM lên thôi. Cái này do hệ điều hành xử lý.

nếu muốn hiểu tương đối sâu về mấy cái này e chừng khó đấy, mình phải học 4,5 môn lận mới hiểu đc nó đấy + làm btl, chứ lan man kiểu này bạn ko hiểu đc đâu.Thế này nhá, phần cứng ở đây là CPU, nó ko làm những công to việc lớn gì lắm đâu, thực tế chỉ có add, sub, mov, jump, … và các đối số truyền vào các hàm này chỉ có 2 đối số là cùng, và thanh ghi nó sẽ lưu những giá trị này, khi đẩy vào cho CPU thì đồng thời nó load gía trị mới vào, và khi CPU tính xong thì reg lại sẵn sàng đẩy giá trị tiếp theo vào, như bác
maisoivn nói, ko có phục hồi, nếu reg lỡ load nội dung mà CPU ko cần ( vì lý do đột ngột như ngắt INT nên CPU phải thực hiện chức năng # thay vì vẫn làm công việc đang dở ) thì CPU phải chờ để reg load đúng thứ CPU cần. Chỉ có 2 thanh ghi đc tự động backup là CS và IP. Còn những thanh ghi khác thì mình ra lệnh backup thì nó mới đc backup. Nên phân biệt rõ load, save, backup: load thì tất nhiên, save thì phải hiểu là a=a+1, sau khi tính xong, giá trị new đc ghi đè vào giá trị cũ, còn backup thì là lưu vào stack.

Xem thêm: To Nghĩa Là Gì – To Là Gì, Nghĩa Của Từ To

Cái này khi chuyển chương trình khác thì hệ điều hành sẽ sao lưu giá trị các thanh ghi hiện tại vào nơi nào đó. Sau đó nó tải giá trị các thanh ghi ứng với chương trình chuẩn bị chuyển và sau đó nó chuyển sang chương trình mới. Chạy chương trình được 1 đoạn nó lại lưu giá trị thanh ghi của chương trình hiện tại và load giá trị thanh ghi tương ứng với chương trình tiếp theo.Cứ như vậy nó luân chuyển thực hiện các chương trình mà ta có cảm giác là tất cả chương trình trên máy tính chạy đồng thời ( mà thực ra là từng cái một).

Chuyên mục: Hỏi Đáp

Share:

Share on facebook
Facebook
Share on twitter
Twitter
Share on pinterest
Pinterest
Share on linkedin
LinkedIn