기타2013. 11. 2. 06:11

이 글은 기존에 Bookmarks.bak파일의 확장자를 제거하여 북마크를 복원했지만, 완벽하게 복원이 되지 않아 좌절하던 필자가 성공적으로 북마크를 복원한 방법입니다.



http://www.howtogeek.com/111784/how-to-recover-accidentally-deleted-bookmarks-in-chrome-firefox/

http://geniebook.tistory.com/63


필자는 위의 블로그 내용처럼 실행을 했지만 기존 북마크의 폴더들만 생성되고 내용은 돌아오지 않았습니다.

(재부팅도 해보았지만 복원은 되지 않았음)

해서 다른 복원방법을 찾아보았지만 별 다른 방법이 없었기에 스스로 복원방법을 찾아냈습니다.


북마크 복원 방법





북마크 파일들은 위 사진과 같이 메모장이나 다른 텍스트 편집툴로 열어볼 수 있습니다.


1. 북마크 파일과 백업파일을 메모장과 같은 텍스트 편집기로 오픈

2. Bookmarks.bak 의 내용을 모두 복사 

3. 복사한 내용을 Bookmarks에 붙여넣기 한 후 Ctrl + S 로 저장

4. 크롬 종료 후 재시작

'기타' 카테고리의 다른 글

암호학의 역사  (0) 2013.01.10
LENOVO 아이디어패드 YOGA 13(요가 13 불량? 단점?)  (3) 2013.01.03
Posted by twinjh
System Programming2013. 3. 28. 01:16


1. 32비트 인텔 프로세서(펜티엄 프로세서)

    펜티엄 프로세서는 한 번의 클럭 동안에 두개의 명령어를 실행할 수 있는 슈퍼 스칼라 구조를 가지고 있다. 또한 내부적으로는 486 프로세서와 같은 32 비트 버스를 사용하지만 메모리와 연결되는 외부 데이터 버스는 64비트이기 때문에 단일 버스 사이클 당 전송될 수 있는 데이터의 양이 486 프로세서의 2배가 된다.


32비트 프로세스의 기본 실행 환경



* FPU(Floating-Point Unit) : 부동 소수점 계산 장치 ... ALU 옆에 부착되있어 ALU의 지원을 극복한 계산을 해준다고 말할 수 있다.


Register 란?


- 작은 데이터의 임시 저장 공간

- 연산처리 및 주소 지정을 도와준다.

- 크기는 레지스터마다 다르지만, 보통 32bit(16bit 컴퓨터에선 16bit 크기, 32bit에서는 32bit크기를 가짐)


범용 레지스터


범용 레지스터들은 산술 논리 연산을 위한 연산항과 결과, 주소 계산을 위한 연산항과 결과 또는 메모리 포인터를 저장하기 위해 사용된다. 총 8가지가 있다.


    1. EAX(Extended Accumulator Register) : 산술연산 과 정수형 반환값을 호출함수에 넘김. EAX 레지스터는 산술(사직연산), 논리 연산을 수행하며 함수의 반환값이 이 레지스터에 저장된다. 즉, 덧셈, 곱셈 등의 명령은 모두 EAX 레지스터를 사용하며, 함수의 반환값이 이 레지스터에 저장된다. 이로인해서 얻는 이점을 살펴보자 
          - 함수의 호출 성공여부 또는 실패 여부를 쉽게 파악할 수 있다.
          - 함수에서 리턴된 값을 이 레지스터를 이용해서 쉽게 얻어올 수 있다.

    2. EBX(Extended Base Register) : 함수나 변수의 주소(특히 DS에 대한 주소 혹은 포인터) 를 저장하거나, ESI나 EDI와 결합하여 인덱스에 사용된다. EBX 레지스터는 포인터 처럼 간접적인 주소를 지정할 때 사용된다. 이 레지스터는 메모리의 주소 지정을 확장하기 위해 인덱스로 사용될 수 있는 유일한 범용 레지스터이다.

    3. ECX(Extended Counter Register) : 문자열과 반복문에 대한 계수기. 루프가 반복되는 횟수를 제어하는 값, ECX 레지스터에 반복할 횟수를 지정한후 반복이 진행될 때마다 값을 감소시킨다.

    4. EDX(Extended Data Register) : 입출력 연산에 사용하며, 큰 수의 곱셈과 나눗셈 연산에서 EAX와 함께 사용한다.

    5. ESI(Extended Source Index) : 문자열 연산에 대한 출발항(예를들어, 배열의 시작항) 또는 DS 레지스터가 가리키고 있는 세그먼트의 데이터에 대한 포인터. 데이터 복사나 조작시 출발항 데이터의 주소가 저장된다.

    6. EDI(Extended Destination Index) : 문자열 연산에 대한 목적항 또는 ESI 레지스터가 가리키고 있는 세그먼트의 데이터에 대한 포인터. 데이터 복사 작업시 Destination의 주소가 저장된다.

    7. ESP(Extended Stack Pointer) : 스택 포인터로서 스택 프레임의 끝 지점의 주소가 저장된다. 

    8. EBP(Extended Base Pointer) : 스택에 있는 데이터에 대한 포인터로서 스택 프레임의 시작 지점의 주소가 저장된다.


세그먼트 레지스터


세그먼트 레지스터들은 메모리 세그먼트를 식별 할 수 있게 한다. 레지스터의 크기는 16비트로 구성되어 있으며, FS와 GS레지스터가 추가 되어 한번에 6개의 서로 다른 세그먼트가 활성화 될 수 있다.



- CS(Code Segment) 레지스터 : 실행될 명령어가 저장되어 있는 세그먼트의 시작 주소를 담고 있다.

- DS(Data Segment), ES(Extra Segment), FS, GS 레지스터 : 4개 데이터 세그먼트를 가리킨다. 4개의 데이터 세그먼트는 서로 다른 데이터 타입을 이루어져 안정하고 효율적인 접근을 허가한다.

- SS(Stack Segment) - 스택 세그먼트의 사작 위치(top)를 가리킨다.


EFLAGS 레지스터


32비트 EFLAGS레지스터는 여러 상태 플래그(State Flag)와 시스템 플래그(System Flag), 제어 플래그(Control Flag)로 구성된다.


< EFLAGS 레지스터 >


위 그림은 각각의 플래그를 정의하고 있다. 프로세스가 초기화 된 이후 EFLAGS 레지스터의 상태는 00000002h가 된다. 회색 부분은 예약된 비트. 


상태 플래그 : EFLAGS 레지스터의 상태 플래그(0, 2, 4, 6, 7, 11번째 비트)는 ADD, SUB, MUL, DIV와 같은 산술 연산의 결과를 가리킨다.


    • OF(Overflow Flag) : 산술연산 결과의 오버플로우 상태를 표시한다.

    • DF(Direction Flag) : 스트링 처리시 오른쪽-왼쪽 or 왼쪽-오른쪽 처럼 처리 방향을 조절하는 플래그.

    • IF(Interrupt-enable Flag) : 외부 인터럽트 가능(enable) 또는 불가능(disable)을 나타낸다.

    • TF(Trap Flag) : 프로세서를 프로그램 디버그용의 싱글 스텝모드가 가능하도록 세팅한다.

    • SF(Sign Flag) : 연산 결과의, 최상위 비트가 1일 때 1로 세트된다. 즉, 최상위 비트가 1이면 음수, 0이면 양수를 나타낸다.

    • ZF(Zero Falg) : 연산 결과가 0으로 되었을 때 1로 세팅된다.

    • AF(Auxiliary Carry Flag) : 10진 산술 연산(BCD) 명령에 사용하고, 하위 니블(4비트)에서 상위 니블로의 자리올림 또는 상위에서 하위로 자리내림이 있을 때 1로 세팅된다.

    • PF(Parity Flag) : 오퍼레이션 결과의 최하위 바이트가 짝수 패리티인 경우에 세트되고, 홀수의 경우는 클리어(0이 됨)된다. 데이터 전송시 에러 검출에 사용한다.

    • CF(Carry Flag) : 최상위 비트에 자리올림 또는 내림이 발생하면 1로 세팅된다. or 부호 없는 정수에 대한 오버플로우를 나타낸다.










'System Programming' 카테고리의 다른 글

2장 컴퓨터 동작의 기본 개념  (0) 2013.03.20
Posted by twinjh
System Programming2013. 3. 20. 22:04

학습 내용

- 컴퓨터 시스템의 기본 구성과 동작

- 컴퓨터 연산 단위

→ 비트, 음수의 표현, 바이트, 단어(Word)의 개념

→ 2진수 연산과 16진수 표현

- 컴퓨터 조직

→ 8086 프로세서, 시스템버스, 기억장치, I/O장치

- 명령어의 실행 개념

→  판독과 기록사이클

- 기억장치의 주소관리 방법과 형태


컴퓨터 연산 단위


- 비트(bit) : 0과 1로 표현되는 가장 작은 기억 단위

- 니블(nibble) : 4bit가 있을 때, 그 4bit를 부르는 단위

- 바이트(byte) : 우리에게 의미를 줄 수 있는 기본 기억 단위, 8bit로 구성

- Word(단어) : 컴퓨터가 자료를 처리하는 기본 단위(컴퓨터마다 각기 다르게 정의됨)

- item(항목) : 필드, 레코드 구성의 논리적 자료 단위

- 필드 : 바이트가 모여 구성되는 (학번, 이름, 주소 등의) 논리적 최소 단위

- 레코드 : 필드가 모여 구성되는 자료 처리의 단위

- 파일 : 레코드가 모여 구성되는 자료의 집합.

- 블록(block) : 보조기억장치와 컴퓨터 내부 사이 전송되는 다수의 레코드 묶음




컴퓨터의 조직


1. 프로세서(Processor)

마이크로 프로세서는 크게 나누어 그림과 같이 명령어 실행 장치(EU : Execution Unit)와 버스 인터페이스 장치(BIU : Bus Interface Unit)로 구성되어 있다. 


- EU에서는 명령이 실행되고, 산술 논리 연산 장치, 범용 레지스터(general purpose register)등이 있다.


- BIU에서는  명령어 페치, 기억 장치나 입출력 장치로부터 데이타를 읽어 오거나 출력등을 행하며, 내부 통신을 위한 세그먼트 레지스터, 유효 주소 계산을 위한 가산기(adder), 실행할 명령어를 기억장치로부터 가져와 임시로 보관하는 버퍼인 명령어 큐(instruction queue)등으로 구성된다. 또한 프로세서 내부에는 각 부분 사이의 자료를 전달해 주는 내부 버스(internal bus)가 있다.


- 레지스터 : 자료를 잠시 저장하고 신속히 이용하기 위한 일종의 기억장소

→ 범용 레지스터(generala register), 세그먼트 레지스터(segment register), 명령어 포인터(IP: Instruction pointer), 인덱스(index) 레지스터 등이 있다. Intel 8086/88 프로세서는 16비트 레지스터 14개를 가지고 있다.


2. 시스템 버스

시스템 버스는 그림과 같이 프로세서, 기억장치, 입출력 장치 사이를 연결하는 신호선으로 되어있다. 일반적으로 주소 버스, 데이터 버스, 제어 버스라는 3개의 시스템 버스가 있다.



레지스터 크기와 연산 장치의 크기는 한 사이클 시간에 CPU에 자료를 저장하고 연산할 수 있는 정보의 양을 결정한다. 마찬가지로 

- 주소 버스 크기 → 기억 장치(메모리)의 크기를 결정

- 데이터 버스의 크기 → 기억장치에서 한 사이클 시간에 읽어올 수 있는 데이터양을 결정


예를 들면, 주소 버스의 크기가 16비트면, 2^16가지 주소를 전달할 수 있고, 따라서 이 컴퓨터가 가리킬 수 있는 기억 장소 최대 주소는 2^16 - 1 = 65,535(약 64KB)가 된다. 때문에 이 컴퓨터는 원칙적으로 64KB의 기억 용량을 가질수 있다.





기억장치





명령어 실행 개념


컴퓨터의 가장 기본적인 동작은 프로세서가 데이터를 기억장치에서 read(판독)하는것과 기억장치에 write(기록)하는 것이 있다. 이것들의 동작 단계를 자세히 알아보자.


* read 사이클 *



* write 사이클 *




앞에서는 프로세서가 외부와 어떻게 동작하는가를 보았다. 이번에는 프로세서가 읽어온 명령어(instruction)를 어떻게 실행하는지 알아보자.


명령어 실행 과정은 크게 4단계로 구분된다.


1. 명령어 인출

2. 명령어 해독

3. 데이터 인출

4. 실행 사이클


프로세서 내의 명령어 포인터(IP : Instruction Pointer)는 다음에 실행할 명령어가 저장된 기억 장치의 주소를 기억하는 특수한 레지스터이다. 앞에서 살펴본 판독(read)과정에 따라 IP가 기억하고 있는 주소를 주소 버퍼를 통하여 주소 버스에 주면, 데이터 버스를 통해 기억 장치에서 명령어를 읽어올 수 있다. 이 읽어온 명령어는 내부 버스를 통하여 버스 인터페이스 장치(BIU)안에 있는 명령어 큐에 저장된다. 명령어를 읽어 오면 IP의 주소를 증가시키는데, 이것은 다음 명령어가 기억된 곳을 가리키게 된다. 일반적으로 이 주소는 Word단위로 증가한다.


다음으로 큐에 저장된 명령어를 해독하기 위해 해당 명령어를 EU(명령어 실행 장치)로 보낸다. 자세한 설명은 생략하지만 ADD나 MOV처럼 부호화된 명령어를 해독하여 실제 회로상에서 필요한 동작이 무엇인지 알아낸다.


해독된 명령어(예를 들면 덧셈연산)를 실행하기 위해서는 피연산자의 데이터를 읽어와야한다. 때문에 해당되는 피연산자의 데이터를 읽어온다.


이제야 프로세서가 명령어를 실행할 준비가 되었다. 이 마지막 단계에서 프로세서는 연산을 실행(명령어 실행)하며, 연산결과가 내부 버스를 통해 레지스터에 저장되던지 또는 기억 장치에 보내기 위해서 버퍼에 잠시 보관되기도한다.


* 명령어 실행 속도 : 한 명령어가 실행되는 시간은 명령어 호출, 명령어 해독, 데이터 호출, 실행 사이클(즉 앞의 4단계)의 경과 시간을 모두 합해야 한다.

fetch time(I-time)  : 명령어 호출 시간

execution time(E-time) : 명령어 해석, 데이터 인출, 연산을 수행 하는시간

instruction cycle : I-time + E-time


특히 명령어의 실행 속도를 나타내는 단위는 MIPS(Million Instruction Per Second)가 많이 사용된다.

→ MIPS 결정 요소 : 사이클 시간, 데이터 버스 크기, 논리 연산 장치 크기, 명령어 크기 등이 있다.




기억 장치 관리

- 선형 기억장치 관리

→ 주소를 선형으로 배열

→ 논리주소 = 물리주소


- 세그먼트 기억장치 관리

→ 기억장소를 세그먼트로 구분

→ 논리주소 /= 물리주소

→ 물리주소 = 논리주소 + 세그먼트 번호



 

<선형 기억장치 관리형태>                                                                                <세그먼트 기억장치 관리형태>







'System Programming' 카테고리의 다른 글

3. 인텔 프로세서의 내부 구조  (0) 2013.03.28
Posted by twinjh