Làm thế nào máy tính có thể lưu mọi thứ trước khi nó gặp sự cố?


52

Tôi có ấn tượng rằng khi một máy tính bị hỏng, đã xảy ra sự cố và nó không thể hoạt động được nữa.

Tôi đã tự hỏi làm thế nào máy tính có thể lưu mọi thứ trước khi nó gặp sự cố?

Máy tính có thực sự có khả năng biết khi nào nó sẽ sập không (và do đó thông báo cho tất cả các quy trình: " Lưu ASAP vì tôi sắp gặp sự cố ")?

Nếu không, làm thế nào có thể các chương trình thích ChromeMicrosoft Wordcó thể cung cấp dịch vụ "khôi phục" sau khi máy tính bị hỏng?


13
Tôi thích cách trả lời cho câu hỏi trong tiêu đề của câu hỏi.
Chris

Làm thế nào là đèn khẩn cấp có thể sáng lên khi mất điện?
JoelFan

@JoelFan họ không làm gì nếu pin / máy phát điện của bạn đã chết = P
Mechaflash

Câu trả lời:


6

Khi máy tính "gặp sự cố", có thể, ví dụ, do sự cố mất điện "đột ngột" (trong trường hợp không thể thực hiện được), có thể do một số sự kiện nội bộ khó chịu (ví dụ: bảng trang bị hỏng) mà tương tự ngăn chặn làm bất cứ điều gì, hoặc có thể do một số điều kiện chỉ đơn giản là ngăn chặn "hoạt động tiếp theo" bằng cách nào đó - có lẽ các quy trình mới không thể được khởi động, có lẽ màn hình không thể được cập nhật, có lẽ hệ thống đã hết dung lượng.

Trong các tình huống sau này, HĐH vẫn có thể hoạt động, trong giới hạn và ít nhất có thể hoàn thành các hoạt động đĩa đang diễn ra, đóng các tệp độc đáo, v.v. Ngoài ra, nếu có thể có thêm một chút chức năng, HĐH có thể cho biết ứng dụng khác nhau các quá trình tự đóng cửa sạch sẽ.

Nhưng ngay cả khi hệ thống bị "cứng", toàn bộ hệ thống và các ứng dụng riêng lẻ có thể đã duy trì một hệ thống "tạp chí" và / hoặc "trạm kiểm soát" để cho phép khôi phục toàn bộ ứng dụng và toàn bộ hệ thống đến một điểm "nguyên tử", trong đó mọi thứ đều "nhất quán nội bộ" và khi mất tối thiểu dữ liệu quan trọng.

Tất cả điều này không được thực hiện với một cơ chế duy nhất, nhưng với các lớp chức năng ở cấp độ hệ thống và ứng dụng.

Liên quan đến sự cố mất điện cụ thể, có thể có hoặc không có thông báo trước và cảnh báo "tạm ứng" có thể là một phần của giây hoặc (với UPS hoặc pin máy tính xách tay bị hỏng) vài phút. Những gì có thể được thực hiện phụ thuộc vào số lượng cảnh báo.

Trong hầu hết các trường hợp, với một hệ thống máy tính để bàn không có UPS, có thời điểm tốt nhất để "kiểm tra" các hoạt động của đĩa sao cho không có đĩa nào ở giữa ghi khi cuối cùng nguồn điện biến mất. Điều này ngăn chặn việc tạo các thành phần xấu trên đĩa. Trước đây, khi RAM nhỏ hơn nhiều, có thể có đủ thời gian (với các tụ điện lớn trong nguồn điện, hoặc thậm chí, sử dụng năng lượng được lưu trữ trong rôto ổ đĩa để tạo ra điện) để ghi RAM vào đĩa trước khi cấp nguồn giảm xuống, nhưng khả năng đó đã biến mất khá nhiều khi RAM tăng lên hơn 100M hoặc hơn.

[Và lưu ý rằng, vào thời xa xưa, khi các ký ức được tạo ra bằng "lõi" từ tính, RAM vốn được bảo toàn khi mất điện (mặc dù một từ cụ thể được đọc / ghi khi mất điện có thể bị hỏng). Điều này giúp những hệ thống cũ đó dễ dàng phục hồi hơn khi mất điện.]

Tuy nhiên, với một cái gì đó tương tự như một UPS (có thể cung cấp bất cứ nơi nào từ vài phút đến vài giờ cho nguồn điện bổ sung), có một số tùy chọn khác. Một là chỉ cần tắt hệ thống, như thể bạn yêu cầu "tắt nguồn". Điều này làm cho mỗi ứng dụng tự kết thúc, và sau đó toàn bộ hệ thống sẽ viết ra các bảng cố định và tắt. Điều này có thể mất nhiều thời gian (vì tôi chắc rằng nhiều bạn đã chú ý). Nhưng cũng có thể sử dụng chiến lược "ngủ đông", trong đó RAM được ghi vào đĩa dưới dạng một khối duy nhất và sau đó hệ thống tắt. Trong kịch bản "ngủ đông", khi khôi phục nguồn, RAM được đọc trở lại chính xác nơi nó được ghi, một vài bit ở đây và bị xáo trộn, và sau đó thực hiện lại tiếp tục ở nơi nó rời đi.

Trên một số hệ thống "sắt lớn" cũ hơn, chiến lược bán ngủ đông đã được sử dụng để thực hiện tắt máy khẩn cấp: Bộ nhớ sẽ được ghi như trên, nhưng khi nguồn được phục hồi và bộ nhớ được đọc thì sẽ tắt máy tiêu chuẩn. Điều này đã được thực hiện bởi vì một số bit của trạng thái hệ thống (đặc biệt là trong bộ điều khiển I / O) không thể được lưu / khôi phục một cách đáng tin cậy để cho phép tiếp tục hoạt động.


82

Chrome và Microsoft Word định kỳ lưu trạng thái hiện tại của bạn khi bạn đang làm việc. Nếu ứng dụng hoặc máy tính gặp sự cố, khi ứng dụng khởi chạy lại, chúng sẽ tìm trạng thái đã lưu trên đĩa và khôi phục nó cho bạn. Họ không cần dự đoán sự cố; họ liên tục cứu trạng thái của bạn trong trường hợp có sự cố xảy ra.


10
Điều này chỉ đúng một phần. Các hệ điều hành hiện cung cấp các khung để giúp các ứng dụng phục hồi từ các ngoại lệ.
Surfasb

3
@surfasb: Bạn có thể cụ thể hơn? Chúng tôi luôn có thể bắt được các tín hiệu trong các hệ thống giống như Unix, nhưng tùy thuộc vào lập trình viên ứng dụng để làm bất cứ điều gì về nó.
Dietrich Epp

5
Câu trả lời này là chính xác. Hầu hết các ứng dụng phục hồi lỗi lưu dữ liệu của họ theo định kỳ. HĐH không thể biết khi nào nó sắp sập. Và khi phát hiện ra thì đã quá muộn.
Bogdacutu

1
Nếu
psusi

62

EDIT: Điều này chỉ hoạt động khi một ứng dụng gặp sự cố, không phải Windows.

Vì Windows Vista có một API mới cho phép Windows gọi một chức năng đặc biệt trong ứng dụng khi nó gặp sự cố để nó có thể cố gắng khôi phục bất kỳ dữ liệu nào trước khi tắt. Nó hoạt động như thế này:

  • Ứng dụng khởi động
  • Ứng dụng gọi chức năng Windows: khi tôi gặp sự cố, vui lòng thực thi RecoverData()
  • ...
  • Sự cố ứng dụng
  • Windows thực thi RecoverData()trong Ứng dụng
  • RecoverData() cố gắng truy xuất dữ liệu về tài liệu hiện đang mở, trong thời gian đó, nó liên tục làm phiền Windows để nói rằng nó vẫn đang bận khôi phục.
  • Khi RecoverData()đã kết thúc / hết thời gian / dừng ping, Windows chấm dứt Ứng dụng và khởi động lại nó.

Thông tin thêm: http://msdn.microsoft.com/en-us/l Library / windows / desktop / aa373351 (v = VS85) .aspx


8
+1: Đây là một trong những công cụ bị sử dụng nhiều nhất ngoài kia thật đáng buồn. Và thật đáng buồn, đây không phải là câu trả lời được đánh giá cao nhất ??
Surfasb

2
@ZippyV tuy nhiên, không phải sự thật là nếu đó không phải là ứng dụng hte bị sập mà chính là các cửa sổ bị sập, máy tính không có khả năng gọi RecoverData()?
Pacerier

12
OP đang hỏi về sự cố máy tính (HĐH), không phải sự cố ứng dụng, do đó câu trả lời này không liên quan.
vitaut

Đúng, trong trường hợp BSOD, điều này sẽ không hoạt động.
ZippyV

Thật là một API ngớ ngẩn để MS thêm vào. Khi đến thời điểm đó, bạn không thể tin tưởng vào ứng dụng để lưu bất kỳ dữ liệu nào, đó là lý do tại sao các ứng dụng đã được thiết kế trong nhiều thập kỷ để lưu dữ liệu trước khi có sự cố xảy ra.
psusi

16

Vâng, họ chỉ lưu trạng thái hiện tại trước khi họ sụp đổ. Giống như tự động lưu mỗi X giây.

Tôi nghĩ người ta thực sự phải phân biệt:

  • Sự cố phần cứng: Chỉ có thể khôi phục với các điểm kiểm tra trước đó
  • Sự cố hệ điều hành: không có cách nào để ứng dụng lưu dữ liệu, hệ điều hành có thể làm rơi thứ gì đó như bãi rác lõi
  • Sự cố ứng dụng: Các tính năng hệ điều hành cho sự cố ứng dụng có thể lưu thông tin

Có, tôi đã nói về các sự cố nghiêm trọng hơn như sự cố hệ điều hành / phần cứng
Pacerier

10

Nó phụ thuộc vào mức độ nghiêm trọng của vụ tai nạn. Một sự cố rất nghiêm trọng (ở mức thấp nhất của máy tính) sẽ khiến máy tính đơn giản dừng lại. Công việc duy nhất được lưu là mỗi ứng dụng tự động lưu dữ liệu của họ theo định kỳ.

Đối với các sự cố ít nghiêm trọng hơn, máy tính sẽ cảnh báo từng chương trình cần tắt. NẾU chương trình lắng nghe thông báo này, đây là nơi chương trình sẽ lưu dữ liệu hiện tại. Tuy nhiên, không phải tất cả các chương trình đều chú ý đến thông điệp này.


1
Tôi không nghĩ rằng phần sau thực sự có thể mặc dù. Windows chỉ cung cấp cho bạn một BSoD nếu nó phát hiện một ngoại lệ trong chế độ kernel hoặc lỗi nghiêm trọng khác có nghĩa là một số dữ liệu trong không gian địa chỉ kernel bị hỏng. Do các chương trình chế độ kernel (trình điều khiển, v.v.) có quyền truy cập bộ nhớ không giới hạn, lỗi có thể dễ dàng tách biệt với các thành phần nên toàn bộ hệ thống phải được tắt trong chế độ kernel. Báo hiệu các chương trình không gian người dùng để lưu dữ liệu về cơ bản có nghĩa là nối lại nhiều chức năng của kernel rất nguy hiểm.
billc.cn

2
Phần sau dường như đề cập đến sự cố không gian người dùng, không phải BSoD.
3Doubloons

8

Các chương trình lưu chúng theo định kỳ trong một tệp trên đĩa. Máy tính không có khả năng biết điều đó. Trên thực tế, kết xuất sự cố thậm chí không được thực hiện bằng trình điều khiển đĩa - hệ thống chỉ đơn giản là hết trang.


Việc phân trang được thực hiện với trình điều khiển đĩa - không có nó, kernel sẽ không biết cách ghi vào đĩa.
psusi

@psusi Khi hệ thống gặp sự cố, pagefile là nơi duy nhất kernel biết nó có thể ghi vào một cách an toàn.
kinokijuf

Vâng, và nó thực sự viết bằng trình điều khiển đĩa.
psusi

1
Không. Nó thực hiện thông qua trình điều khiển "dump_atapi.sys" (thay thế atapi cho bộ điều khiển SCSI của bạn), KHÔNG phải trình điều khiển đĩa tiêu chuẩn. Tôi nghĩ rằng nó thậm chí sử dụng Int 13h.
kinokijuf

6

Tôi có ấn tượng rằng khi một máy tính bị hỏng, đã xảy ra sự cố và nó không thể hoạt động được nữa.

Vâng, điều này là hoàn toàn đúng. Tuy nhiên, từ góc độ logic, chương trình của bạn không chạy không giới hạn trên máy tính. Chương trình đang chạy dưới hệ điều hành!

Tôi đã tự hỏi làm thế nào máy tính có thể lưu mọi thứ trước khi nó gặp sự cố? Máy tính có thực sự có khả năng biết khi nào nó sẽ sập không (và do đó thông báo cho tất cả các quy trình: "Lưu ASAP vì tôi sắp gặp sự cố")?

Chà, trong trường hợp BSOD hoặc kernel hoảng loạn, hệ điều hành xác định rằng điều thực sự không an toàn sẽ xảy ra (con trỏ bộ nhớ không hợp lệ, ghi đè lên một số bộ nhớ được cấp cho kernel OS, truy cập vào phần cứng không tồn tại, v.v. .). Trong trường hợp đó, hệ điều hành yêu cầu tất cả các quá trình tạm dừng thực thi, lưu nội dung của RAM vào đĩa (vì HĐH cũng chịu trách nhiệm quản lý cấp phát bộ nhớ) và tắt hoặc khởi động lại máy tính một cách an toàn.

Các ứng dụng riêng lẻ tự sập khi có một ngoại lệ chưa được xử lý do chương trình ném vào, nó truyền vào hệ điều hành. Trong trường hợp này, HĐH sẽ dừng thực thi chương trình và đóng mọi bộ xử lý bộ nhớ / tệp đang mở.

Trong cả hai trường hợp trên, việc thực hiện chương trình thường không được kết thúc một cách duyên dáng. Trong những trường hợp này, tùy thuộc vào từng ứng dụng để khôi phục dữ liệu của riêng họ, vì chúng đột nhiên chỉ "dừng" thực thi.

Nếu không, làm thế nào để các chương trình như Chrome và Microsoft Word có thể cung cấp dịch vụ "khôi phục" sau khi máy tính gặp sự cố?

IIRC, cả hai ứng dụng này định kỳ lưu trạng thái ứng dụng vào đĩa để tránh mất dữ liệu nếu xảy ra tình trạng nói trên. Ví dụ: Word tự động lưu một bản sao lưu của tài liệu làm việc hiện tại của bạn cứ sau vài phút để trong trường hợp khởi động lại đột ngột, bạn vẫn có thể khôi phục dữ liệu của mình (cho hoặc mất vài phút làm việc) mà không cần phải đã làm bất cứ điều gì.

Tuy nhiên, một lần nữa, với tư cách là một nhà phát triển, bạn có trách nhiệm đảm bảo rằng ứng dụng của bạn có thể xử lý các tình huống này.


"Trong trường hợp đó, hệ điều hành yêu cầu tất cả các quy trình tạm dừng thực thi, lưu nội dung của RAM vào đĩa và tắt hoặc khởi động lại máy tính một cách an toàn." - nội dung RAM được lưu vào đĩa, khi nào chúng được "khôi phục"?
Pacerier

1
Họ không tham gia vào các sự kiện thông thường. Tuy nhiên, nếu máy tính của bạn thường xuyên bị hỏng, một lập trình viên lành nghề có thể sử dụng tệp này để tìm ra nguyên nhân.
kindall

@Pacerier như kindallđã nêu, chúng không được khôi phục (vì nếu bạn đã khôi phục RAM, bạn sẽ ở trạng thái thực thi tương tự khiến máy tính gặp sự cố ngay từ đầu!). Bạn có thể thay đổi những gì được ghi vào đĩa trong Windows trong System Properties -> Advanced -> Startup & Recovery. Và một lần nữa như kindallđã nêu, thông tin này chủ yếu hữu ích cho các nhà phát triển đang cố gắng xác định nguyên nhân gây ra lỗi.
Đột phá

3

vâng, quá trình khôi phục dữ liệu không chỉ xảy ra đối với sự cố máy tính, nó là sự cố mất điện, sự cố chương trình, thoát mà không lưu, và nhiều hơn nữa ..

Những gì bạn nói là đúng, máy tính không thể 'biết' khi nào nó bị sập, trong trường hợp của Word, nó sẽ tự động định kỳ để nó có thể khôi phục dữ liệu đó. Trong trường hợp của Chrome, nó có thể lưu trữ thông tin cho mọi tab ở đâu đó và xóa thông tin đó khi thoát thành công hoặc khi một phiên mới và khác bắt đầu .. hoặc có thể là những cách khác nữa .. dù sao, theo cách đó, nếu không kết thúc với việc thoát thành công, nó có dữ liệu đó để khôi phục lại.

Tôi (rõ ràng) không làm việc cho Microsoft hoặc Google, nhưng đó có lẽ là cách (hoặc gần với cách thức) nó hoạt động.


2

Một chương trình có thể ghi một cờ vào đĩa chỉ nói một cái gì đó như "Khi khởi động, nếu cờ này được đặt thì có gì đó không ổn". Khi khởi động, cờ đó được kiểm tra xem nó đã được đặt chưa. Nếu có, chương trình biết có gì đó không ổn.

Cờ luôn hoạt động, bởi vì nó có thể được đặt ngay khi chương trình khởi động và tắt khi chương trình thoát bình thường. Nếu chương trình thoát khỏi lỗi không mong muốn, như máy tính bị tắt nguồn bất ngờ, cờ sẽ vẫn được đặt do không thoát bình thường. Sau đó, chương trình có thể nói rằng nó không thoát bình thường trong lần chạy cuối cùng.


2

Giống như @bamboom nói, có một số loại "sự cố" máy tính khác nhau phải được xử lý khác nhau. Thực tế, việc mất điện rất khác so với việc chia số nguyên cho lỗi không.

Với nhiều ngôn ngữ lập trình cũng hỗ trợ các ngoại lệ (phân nhánh được kiểm soát đến trình xử lý lỗi khi có sự cố hoàn toàn), có khả năng có trình xử lý lỗi toàn ứng dụng cấp cao nhất có thể lưu trạng thái của ứng dụng (bao gồm mọi tài liệu mở, thay đổi được thực hiện , v.v.) khi xảy ra lỗi ứng dụng chưa xử lý. Ý tưởng sau đó là cố gắng đọc lại tất cả khi ứng dụng được khởi động lại. Tùy thuộc vào loại lỗi và chính xác cách thức thực hiện, nó không phải lúc nào cũng hoạt động và tất nhiên, mỗi ứng dụng riêng biệt phải làm điều gì đó có ý nghĩa khi đối mặt với lỗi và với dữ liệu kết quả - nhưng đó có thể là một chiến lược hiệu quả đáng ngạc nhiên trong việc giúp người dùng phục hồi sau sự cố với số lượng công việc bị mất tối thiểu.


2

Tôi muốn một điểm cấp thấp ở đây, vì có một thẻ của hệ thống tập tin.

Bạn có thể đã nhớ hệ điều hành Windows đã sử dụng hệ thống tệp FAT / FAT16 / FAT32. Đôi khi có vấn đề khi người dùng bị mất điện và toàn bộ hệ thống bị hỏng. Sau khi thử khởi động lại, nó sẽ báo rằng một tệp bị thiếu và không thể khởi động. Điều này xảy ra vì FAT32 không theo dõi các hoạt động mà nó đang thực hiện theo cách giao dịch.

Ngược lại hệ thống tập tin NTFS mới nhận được tạp chí hỗ trợ cơ sở hạ tầng của nó, có nghĩa là trên mức thấp của hệ điều hành và thông tin lớp truy cập phần cứng sẽ được giữ trong tình trạng an toàn ổn định bằng cách ghi âm của bất kỳ hành động được cam kết.


1

Trong một số ứng dụng trên một số hệ điều hành, có thể nối vào các tín hiệu như lỗi phân đoạn cho thấy vi phạm truy cập bộ nhớ. Trong trường hợp này, một thói quen đơn giản có thể lưu càng nhiều dữ liệu càng tốt. Liệu dữ liệu đó có thể sử dụng được hay không là một câu hỏi khác - sự cố có thể đã làm hỏng nó. Mặc dù ứng dụng có thể tiếp tục chạy sau khi nó làm gián đoạn tín hiệu, nhưng nó không được khuyến khích, vì nó có thể ở trạng thái không ổn định với bộ nhớ bị hỏng có thể gây ra thêm sự cố.

Các ứng dụng khác sử dụng lưu tự động hoặc kết hợp cả hai - tùy thuộc vào nhu cầu của chương trình và hỗ trợ nền tảng để bắt các tín hiệu này.


Gợi ý: Windows không có chúng.
kinokijuf

1

Sự cố hệ thống chỉ là một thói quen khác được chạy bởi HĐH. Lý do "Sự cố" xảy ra là do chương trình hoặc thư viện không tải hoặc không tải đúng cách và có khả năng gây hại vĩnh viễn cho các tệp hệ thống. Vì vậy, để phòng ngừa an toàn, các cửa sổ buộc phải tắt / khởi động lại và dừng tất cả ghi vào các tệp hệ thống trước khi bất kỳ tệp nào được phép chỉnh sửa bởi chương trình / thư viện phạm pháp.

Trước khi tắt / khởi động lại, nó thực hiện các chức năng tương tự như tắt / khởi động lại thông thường: tức là lưu tệp hệ thống, v.v.

Theo như các ứng dụng đơn (Word / Chrome) lưu "Tiến trình" của bạn, đó là chức năng nội bộ của ứng dụng, lưu tiến trình của bạn theo các khoảng thời gian cụ thể (mà bạn cũng thường có thể thay đổi trong cài đặt chương trình). Nếu bạn gặp sự cố ứng dụng / hệ thống, sau khi khởi động lại, nó có thể xem tệp đó và hỏi bạn có muốn khôi phục phiên không.


1

Bạn có thể đang nói về việc hệ điều hành ngừng hoạt động do mất điện. Điều này được cho là một loại tai nạn.

Bộ nguồn cung cấp thông báo cho bo mạch chính (thông qua dây tín hiệu, tôi cho là) ​​về bất kỳ sự gián đoạn dài nào của đầu vào của nó, dòng điện xoay chiều thích hợp, trước khi nó dừng đầu ra, đó là nguồn cung cấp dòng DC thích hợp cho bo mạch chính. Nó có thể làm điều này bởi vì nó lưu trữ điện của nó trong các tụ điện lớn. HĐH nhận được tín hiệu này dưới dạng ngắt phần cứng.

Trong khoảng thời gian dài này, có đủ thời gian để hệ thống tập tin ghi đệm chuyển tất cả các bộ đệm ghi vào phương tiện lưu trữ vật lý vĩnh viễn, cũng như thực hiện một số thói quen tắt máy khác.

Một lợi thế lớn của hệ thống tập tin ghi đệm là bằng cách sắp xếp ghi, nó có thể giảm chuyển động của cánh tay trên các ổ đĩa cứng, khiến chúng ngày càng ít đi.

Điều này tương tự như những gì @oleksii nói trong câu trả lời của anh ta, ngoại trừ trong hệ thống tập tin ghi đệm, các giao dịch đã hoàn thành thường không được chuyển ngay lập tức mà chỉ được đệm. Khi mất điện, các giao dịch đã hoàn thành sẽ được chuyển vào đĩa.


0

Ứng dụng có thể bắt tín hiệu trong C và lưu dữ liệu nhất định. Một tín hiệu bạn có thể vô tình nhận được là Ngoại lệ số học SIGFPE (ANSI). Lỗi bao gồm chia cho 0 và tràn. Một số ít khác là SIGINT được nâng lên bằng cách nhấn ctrl + C trên bảng điều khiển hoặc thiết bị đầu cuối sẽ giết ứng dụng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.