컴퓨터가 충돌하기 전에 어떻게 물건을 저장할 수 있습니까?


52

컴퓨터가 추락했을 때 문제가 발생하여 더 이상 수행 할 수 없다는 인상을 받았습니다.

컴퓨터가 충돌하기 전에 물건을 어떻게 저장할 수 있는지 궁금합니다.

컴퓨터는 언제 충돌이 일어날 지 알 수 있습니다 (따라서 모든 프로세스에 알려주십시오 : "충돌하려고하기 때문에 최대한 빨리 저장하십시오 ")?

그렇지 않은 경우 컴퓨터가 다운 된 후 프로그램이 어떻게 "복원"서비스를 제공 Chrome하고 Microsoft Word제공 할 수 있습니까?


13
나는 질문에 대한 대답이 질문의 제목에 얼마나 좋아하는지 좋아합니다.
Chris

전원이 꺼 졌을 때 비상등이 어떻게 켜지나요?
JoelFan

@JoelFan 배터리 / 발전기가 죽었을 경우에는 작동하지 않습니다 = P
Mechaflash

답변:


6

컴퓨터가 "충돌"할 때, 예를 들어, "급격한"정전으로 인한 것일 수 있으며 (이 경우 아무 것도 할 수없는 경우), 어떤 종류의 내부 이벤트 (예 : 손상된 페이지 테이블) 때문일 수 있습니다. 이와 유사하게 어떤 일도하지 못하거나 단순히 "추가 작업"을 막는 어떤 조건 때문일 수 있습니다. 아마도 새로운 프로세스를 시작할 수 없거나, 디스플레이를 업데이트 할 수 없거나, 시스템에 저장 공간이 부족했을 수 있습니다.

후자의 상황에서 OS는 여전히 한계 내에서 작동 할 수 있으며 최소한 진행중인 디스크 작업을 완료하거나 파일을 멋지게 닫는 등의 작업을 수행 할 수 있습니다. 또한 약간 더 많은 기능이 가능한 경우 OS는 다양한 응용 프로그램을 말할 수 있습니다 자신을 깨끗하게 종료하는 프로세스.

그러나 시스템이 "하드"상태가 되어도 전체 및 개별 응용 프로그램으로서의 시스템은 전체 및 개별 응용 프로그램으로서의 시스템 상태를 복원 할 수 있도록 "저널"및 / 또는 "체크 포인트"시스템을 유지 관리했을 수 있습니다. 모든 것이 "내부적으로 일관성있는" "최소한"중요한 데이터가 손실 된 "원자"지점까지.

이 모든 것이 단일 메커니즘이 아니라 시스템 및 응용 프로그램 수준의 기능 계층으로 수행됩니다.

특히 정전과 관련하여 사전 통지가있을 수도 있고 없을 수도 있습니다. "사전"경고는 1 분의 1 분의 1 또는 (UPS 또는 고장난 랩탑 배터리의 경우) 몇 분일 수 있습니다. 수행 할 수있는 것은 경고의 양에 따라 다릅니다.

대부분의 경우, UPS가없는 데스크탑 시스템의 경우 전원이 완전히 꺼질 때 디스크가 쓰기 도중에 없도록 디스크 작동을 "정지"할시기가 가장 좋습니다. 이렇게하면 디스크에서 불량 섹터가 생성되지 않습니다. RAM이 훨씬 작을 때 전원 공급 장치에 큰 커패시터가 있거나 전기를 생성하기 위해 디스크 드라이브 로터에 저장된 에너지를 이상하게 사용하는 경우가 많았습니다. 그러나 RAM이 100M 이상으로 커지면 그 가능성은 거의 사라졌습니다.

[그리고 옛날에는 자기 "코어"로 메모리를 만들었을 때 전원이 꺼 졌을 때 RAM이 본질적으로 보존되었습니다 (전원이 꺼 졌을 때 특정 단어를 읽거나 쓰면 손상 될 수 있음). 이로 인해 기존 시스템이 정전으로부터 더 쉽게 복구 할 수있었습니다.]

그러나 몇 분에서 몇 시간 동안 추가 전력을 공급할 수있는 UPS와 유사한 기능에는 몇 가지 옵션이 더 있습니다. 하나는 "전원 끄기"를 요청한 것처럼 시스템을 종료하는 것입니다. 이로 인해 각 응용 프로그램 자체가 종료 된 다음 시스템이 전체적으로 영구 테이블을 작성하고 종료됩니다. 시간이 오래 걸릴 수 있습니다 (많은 사람들이 알고 있듯이). 그러나 RAM이 디스크에 단일 블록으로 기록 된 다음 시스템 전원이 꺼지는 "최대 절전"전략을 사용할 수도 있습니다. "최대 절전 모드"시나리오에서 전원을 복원 할 때 RAM은 RAM이 작성된 위치, 여기에 약간의 비트가 기록 된 후 다시 읽히고 중단 된 부분부터 실행이 다시 시작됩니다.

일부 오래된 "큰 철"시스템에서는 비상 종료를 수행하기 위해 반 최대 절전 모드 전략이 사용되었습니다. 메모리는 위와 같이 기록되지만 전원이 복구되고 메모리를 읽을 때 표준 종료가 발생합니다. 이는 일부 비트의 시스템 상태 (특히 I / O 컨트롤러에서)를 지속적으로 작동시키기 위해 안정적으로 저장 / 복원 할 수 없기 때문에 수행되었습니다.


82

Chrome 및 Microsoft Word는 작업하는 동안 주기적으로 현재 상태를 저장합니다. 응용 프로그램이나 컴퓨터가 충돌하면 응용 프로그램을 다시 시작할 때 디스크에서 저장된 상태를 찾아 복원합니다. 충돌을 예측할 필요는 없습니다. 그들은 무언가 잘못 될 경우를 대비하여 끊임없이 당신의 상태를 저장하고 있습니다.


10
이것은 부분적으로 만 사실입니다. OS는 이제 응용 프로그램이 예외를 복구 할 수 있도록 프레임 워크를 제공합니다.
surfasb

3
@surfasb : 좀 더 구체적으로 말씀해 주시겠습니까? 우리는 항상 유닉스 계열 시스템에서 신호를 포착 할 수 있었지만 그것에 대해 무엇이든하는 것은 애플리케이션 프로그래머의 몫입니다.
Dietrich Epp

5
이 대답은 맞습니다. 오류 복구 기능이있는 대부분의 응용 프로그램은 주기적으로 데이터를 저장합니다. OS는 언제 충돌할지 알 수 없습니다. 그리고 그것이 발견되면 너무 늦습니다.
Bogdacutu

1
@surfasb, 예외는 응용 프로그램이 아니라 컴퓨터 (커널) 충돌에 대해 질문했습니다.
psusi

62

편집 : 이것은 Windows가 아닌 응용 프로그램이 충돌 할 때만 작동합니다.

Windows Vista에는 Windows가 응용 프로그램 충돌시 응용 프로그램에서 특수 기능을 호출 할 수 있도록하는 새로운 API가 있으므로 종료하기 전에 모든 데이터를 복구 할 수 있습니다. 다음과 같이 작동합니다.

  • 앱 시작
  • 앱이 Windows 기능을 호출합니다. RecoverData()
  • ...
  • 앱 충돌
  • RecoverData()앱에서 Windows가 실행 됩니다.
  • RecoverData() 현재 열려있는 문서에 대한 데이터를 검색하려고 시도하는 동안 Windows가 Ping을 계속 수행하는 동안 여전히 복구 중임을 알립니다.
  • RecoverData()완료 / 번 아웃 / Windows에서 응용 프로그램을 종료하고 다시 시작합니다, 핑을 중지합니다.

자세한 정보 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx


8
+1 : 슬프게도 가장 많이 사용되지 않는 도구 중 하나입니다. 그리고 슬프게도, 이것은 가장 반항적 인 대답이 아닙니다 ??
surfasb

2
그러나 @ZippyV는 응용 프로그램이 충돌하는 것이 아니라 Windows 자체가 충돌하는 경우 컴퓨터에 전화 할 수있는 능력이 없다는 것이 사실이 RecoverData()아닙니까?
Pacerier

12
OP는 응용 프로그램 충돌이 아닌 컴퓨터 (OS) 충돌에 대해 묻기 때문에이 답변은 관련이 없습니다.
vitaut

사실, BSOD의 경우에는 작동하지 않습니다.
ZippyV

MS가 추가하는 어리석은 API. 그 시점에 도달하면 데이터를 저장하기 위해 응용 프로그램을 신뢰할 수 없으므로 문제가 발생 하기 전에 수십 년 동안 데이터를 저장하도록 응용 프로그램이 설계되었습니다 .
psusi

16

글쎄, 그들은 충돌 하기 전에 현재 상태 저장합니다 . 매 X 초마다 자동 저장하는 것과 같습니다.

나는 정말로 차별화해야한다고 생각합니다.

  • 하드웨어 충돌 : 이전 검사 점으로 만 복구 가능
  • OS 충돌 : 앱이 데이터를 저장할 수있는 방법이 없습니다. OS에서 코어 덤프와 같은 것을 삭제할 수 있습니다.
  • 응용 프로그램 충돌 : 응용 프로그램 충돌을위한 OS 기능으로 정보를 저장할 수 있습니다

예, OS / 하드웨어 충돌과 같은보다 심각한 충돌에 대해 이야기했습니다
Pacerier

10

충돌의 심각도에 따라 다릅니다. 컴퓨터의 가장 낮은 수준에서 매우 심각한 충돌이 발생하면 컴퓨터가 단순히 정지됩니다. 저장되는 유일한 작업은 각 응용 프로그램이 데이터를 주기적으로 자동 저장하는 것입니다.

덜 심각한 충돌의 경우 컴퓨터는 종료해야하는 각 프로그램에 경고합니다. 경우 프로그램이 메시지를 수신하는 프로그램이 현재 데이터를 저장할 곳이있다. 그러나 모든 프로그램이이 메시지에주의를 기울이는 것은 아닙니다.


1
나는 후자가 실제로 가능하다고 생각하지 않습니다. 커널 주소 공간의 일부 데이터가 손상되었음을 의미하는 커널 모드 또는 기타 치명적인 오류에서 예외를 감지하면 Windows는 BSoD 만 제공합니다. 커널 모드 프로그램 (드라이버 등)은 무제한 메모리 액세스를 갖기 때문에 오류를 구성 요소에 쉽게 격리 할 수 ​​없으므로 전체 시스템을 커널 모드에서 종료해야합니다. 데이터를 저장하도록 사용자 공간 프로그램에 신호를 보내는 것은 본질적으로 매우 위험한 커널 기능을 재개한다는 것을 의미합니다.
billc.cn

2
후자는 BSoD가 아닌 사용자 공간 충돌을 나타내는 것으로 보입니다.
3Doubloons

8

프로그램은 디스크의 파일에 주기적으로 상태를 저장합니다. 컴퓨터가이를 알 수 없습니다. 실제로 크래시 덤프는 디스크 드라이버를 사용하여 수행되지도 않습니다. 시스템은 단순히 모든 메모리를 페이징합니다.


페이징은 디스크 드라이버로 수행됩니다. 커널이 없으면 커널은 디스크에 쓰는 방법을 모릅니다.
psusi

@psusi 시스템이 충돌하면 페이지 파일은 커널이 안전하게 쓸 수있는 유일한 곳입니다.
kinokijuf 2012 년

예, 실제로 디스크 드라이버를 통해 쓰기를 수행합니다.
psusi

1
아니요. 표준 디스크 드라이버가 아닌 특수한 "dump_atapi.sys"(SCSI 컨트롤러에 atapi로 대체) 드라이버를 사용합니다. 나는 심지어 Int 13h를 사용한다고 생각합니다.
kinokijuf

6

컴퓨터가 추락했을 때 문제가 발생하여 더 이상 수행 할 수 없다는 인상을 받았습니다.

예, 이것은 사실입니다. 그러나 논리적 관점에서 컴퓨터에서 프로그램이 무제한으로 실행되고 있지 않습니다. 프로그램이 운영 체제에서 실행 중입니다!

컴퓨터가 충돌하기 전에 물건을 어떻게 저장할 수 있는지 궁금합니다. 컴퓨터가 실제로 언제 충돌하는지 알 수 있습니까 (따라서 모든 프로세스에 알려야합니다. "충돌하려고하기 때문에 최대한 빨리 저장하십시오")?

음,의 경우 BSOD 또는 커널 패닉, 운영 시스템은 정말 안전하지 않은 건 등 OS 커널, 존재하지 않는 하드웨어에 대한 액세스에 할당 된 일부 메모리 덮어 쓰기 (잘못된 메모리 포인터를 일어날 것을 결정 .. ). 이 경우 운영 체제는 모든 프로세스에서 실행을 중지하고 RAM의 내용을 디스크에 저장합니다 (OS가 메모리 할당 관리를 담당하기 때문에). 컴퓨터를 안전하게 종료하거나 다시 시작합니다.

프로그램에 의해 처리되지 않은 예외가 발생하면 운영 체제로 전파되는 개별 응용 프로그램 자체가 중단됩니다. 이 경우 OS는 프로그램 실행을 중지하고 열린 메모리 / 파일 핸들을 닫습니다.

위의 두 경우 모두 프로그램 실행이 정상적으로 종료되지 않습니다. 이러한 경우 갑자기 "실행 중지"하기 때문에 자체 데이터를 복구하는 것은 개별 응용 프로그램에 달려 있습니다.

그렇지 않은 경우 컴퓨터가 충돌 한 후 Chrome 및 Microsoft Word와 같은 프로그램이 어떻게 "복원"서비스를 제공 할 수 있습니까?

IIRC, 이러한 두 응용 프로그램은 주기적으로 응용 프로그램 상태를 디스크에 저장하여 위에서 언급 한 조건이 발생할 경우 데이터 손실을 방지합니다. 예를 들어, Word는 몇 분마다 현재 작업 문서의 백업 복사본을 자동 저장하므로 갑작스런 하드 재부팅시에도 데이터를 복구하지 않고도 데이터를 복구하거나 (몇 분의 작업을 수행 할 수 있음) 아무것도하지 않았다.

그러나 개발자로서 응용 프로그램이 이러한 상황을 처리 할 수 ​​있도록하는 것은 사용자의 책임입니다.


"이 경우 운영 체제는 모든 프로세스에서 실행을 중단하고 RAM의 내용을 디스크에 저장하며 컴퓨터를 안전하게 종료하거나 다시 시작합니다." -디스크에 저장된 RAM 내용은 언제 "복원"됩니까?
Pacerier

1
그들은 정상적인 행사 과정에 있지 않습니다. 그러나 컴퓨터가 정기적으로 충돌하는 경우 숙련 된 프로그래머가이 파일을 사용하여 원인을 파악할 수 있습니다.
kindall

로 @Pacerier kindall진술 (이 경우 때문에,이 복원되지 않는 램을 복원, 당신이 처음에 충돌하는 컴퓨터의 원인이 된 동일한 실행 상태에있을 것입니다!). Windows의 시스템 등록 정보-> 고급-> 시동 및 복구에서 디스크에 기록되는 내용을 변경할 수 있습니다. 그리고 다시 같은 kindall언급이 정보는 오류의 원인을 결정하기 위해 노력하고 개발자들에게 주로 유용합니다.
획기적인

3

예, 데이터 복원 프로세스는 컴퓨터 충돌만을위한 것이 아니라 정전, 프로그램 충돌, 저장하지 않고 종료하는 것 등을위한 것입니다.

당신이 말한 사실은 컴퓨터가 충돌 할 때 '알 수'없으며 Word의 경우 주기적으로 자동 저장되어 해당 데이터를 복원 할 수 있다는 것입니다. Chrome의 경우 아마도 모든 탭의 정보를 어딘가에 저장하고 성공적으로 종료하거나 새롭고 다른 세션이 시작될 때 또는 다른 방법으로 삭제 할 때 삭제합니다. 어쨌든, 그렇지 않은 경우 성공적으로 종료되면 복원 할 데이터가 있습니다.

나는 (분명히) Microsoft 또는 Google에서 작동하지 않지만 아마도 그것이 작동하는 방식 일 것입니다.


2

프로그램은 "부팅시,이 플래그가 설정되면 문제가 발생했습니다"와 같은 플래그를 디스크에 쓸 수 있습니다. 부팅시 해당 플래그가 설정되어 있는지 확인합니다. 그렇다면, 프로그램은 무언가 잘못되었음을 알고 있습니다.

프로그램이 시작하자마자 설정할 수 있고 프로그램이 정상적으로 종료되면 꺼질 수 있기 때문에 플래그는 항상 작동합니다. 컴퓨터가 예기치 않게 종료되는 것처럼 프로그램 종료가 예기치 않은 오류를 발생시키는 경우 플래그가 정상적으로 종료되지 않았으므로 플래그가 계속 설정됩니다. 그런 다음 프로그램은 마지막으로 실행될 때 정상적으로 종료되지 않았다고 알릴 수 있습니다.


2

마찬가지로 @bamboom는 말한다 다르게 처리 할 필요가 컴퓨터 "충돌"의 여러 가지 종류가 있습니다. 실제로 정전은 0으로의 정수 나누기와는 매우 다릅니다.

많은 프로그래밍 언어가 예외를 지원하기 때문에 (문제가 완전히 잘못되었을 때 오류 처리기로 분기 제어) 응용 프로그램의 상태를 저장할 수있는 최상위 수준의 응용 프로그램 전체 오류 처리기가있을 수 있습니다 (열린 문서, 변경 사항 포함) 처리되지 않은 애플리케이션 오류가 발생한 경우 그런 다음 응용 프로그램을 다시 시작할 때 모든 내용을 다시 읽으려고합니다. 오류 유형과 이것이 어떻게 구현되는지에 따라 항상 작동하는 것은 아니며, 오류가 발생하고 결과 데이터로 의미있는 작업을 수행하는 것은 각 개별 응용 프로그램에 달려 있습니다. 최소한의 손실 된 작업으로 사용자가 사고를 복구하는 데 도움이되는 놀랍도록 효과적인 전략.


2

파일 시스템 태그가 있으므로 여기서는 저수준을 원합니다.

FAT / FAT16 / FAT32 파일 시스템을 사용한 Windows OS를 기억했을 것입니다. 사용자가 정전을 경험하고 전체 시스템이 다운 될 때 때때로 문제가 발생했습니다. 재부팅을 시도한 후 파일이 누락되어 부팅 할 수 없다는 메시지가 나타납니다. 이것은 FAT32가 트랜잭션 방식으로 수행중인 작업을 추적하지 않았기 때문에 발생했습니다.

반대로 최신 NTFS 파일 시스템은 인프라에 대한 저널 지원을 받았으며 이는 낮은 수준의 OS 및 하드웨어 액세스 계층 정보가 커밋 할 작업을 기록하여 안정적인 안전한 상태를 유지함을 의미합니다.


1

일부 운영 체제의 일부 응용 프로그램에서는 메모리 액세스 위반을 나타내는 세그먼트 오류와 같은 신호에 연결할 수 있습니다. 이 경우 간단한 루틴으로 최대한 많은 데이터를 저장할 수 있습니다. 해당 데이터를 사용할 수 있는지 여부는 또 다른 질문입니다. 충돌로 인해 데이터가 손상되었을 수 있습니다. 신호를 중단 한 후에도 응용 프로그램을 계속 실행할 수 있지만 메모리가 손상되어 불안정한 상태 일 수 있으므로 추가 문제가 발생할 수 있으므로 권장하지 않습니다.

다른 응용 프로그램은 자동 저장 또는이 둘의 조합을 사용합니다. 이러한 신호를 포착하기위한 프로그램 및 플랫폼 지원 요구에 따라 다릅니다.


힌트 : Windows에는 없습니다.
kinokijuf

1

시스템 충돌은 OS가 실행하는 또 다른 루틴입니다. "충돌"이 발생하는 이유는 프로그램이나 라이브러리가 제대로로드되지 않았거나 제대로로드되지 않아 시스템 파일에 영구적 인 손상을 줄 수 있기 때문입니다. 따라서 안전 예방책으로 Windows는 강제 종료 / 다시 시작하고 시스템 파일에 대한 모든 쓰기를 중지합니다.

종료 / 다시 시작하기 전에 일반 종료 / 다시 시작과 동일한 기능, 즉 시스템 파일 저장 등을 수행합니다.

"Progress"를 저장하는 단일 응용 프로그램 (Word / Chrome)까지는 응용 프로그램의 내부 기능으로 특정 간격 (일반적으로 프로그램 설정에서도 변경할 수 있음)으로 진행 상황을 저장합니다. 응용 프로그램 / 시스템 충돌이있는 경우 재부팅 후 해당 파일을보고 세션을 복원 할 것인지 묻습니다.


1

전원 손실로 인해 OS 종료에 대해 이야기하고있을 수 있습니다. 이것은 아마도 일종의 충돌입니다.

전원 공급 장치는 메인 보드에 신호를 공급하기 전에 신호의 긴 중단, 적절한 벽 AC 전류에 대해 메인 보드에 신호를 보냅니다. 전기를 큰 커패시터에 저장하기 때문에 가능합니다. OS는이 신호를 하드웨어 인터럽트 형태로 수신합니다.

이 긴 간격 동안, 쓰기 버퍼링 파일 시스템이 버퍼링 된 모든 쓰기를 영구 물리적 저장 매체로 전송하고 다른 종료 루틴을 수행하기에 충분한 시간이 있습니다.

쓰기 버퍼링 파일 시스템의 큰 장점 중 하나는 쓰기를 정렬하여 하드 디스크 드라이브에서 팔의 움직임을 줄여 거리를 좁힐 수 있다는 것입니다.

이것은 쓰기 버퍼링 파일 시스템에서 완료된 트랜잭션이 일반적으로 즉시 전송되는 것이 아니라 단순히 버퍼링된다는 점을 제외하고 @oleksii의 답변과 비슷합니다. 정전시 완료된 트랜잭션을 디스크로 전송해야합니다.


0

앱은 C에서 신호를 포착 하고 특정 데이터를 저장할 수 있습니다. 실수로 발생할 수있는 신호 중 하나는 SIGFPE 부동 소수점 산술 예외 (ANSI)입니다. 오류는 0으로 나누기와 오버플로를 포함합니다. 콘솔 또는 터미널에서 ctrl + C를 누르면 앱이 종료되는 SIGINT가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.