기타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
카테고리 없음2013. 1. 16. 16:32

프로세스 간의 통신(InterProcess Communication : IPC)

운영체제에서 동시에 수행되는 프로세스들은 독립적인 프로세스거나 서로 협력하는 프로세스 중 하나이다. 독립적인 프로세스는 다른 프로세스의 실행에 영향을 끼칠 수도 없고, 받을 수도 없다. 반면 협력적인 프로세스는 다른 프로세스의 실행에 영향을 끼칠 수도 있고, 받을 수도 있다. 프로세스간 협력을 해야하는 몇 가지 이유를 살펴보면 다음과 같다.


- 정보 공유

- 계산 속도 향상 : 병렬성은 계산속도를 향상시킨다.

- 모듈화 : 기능에 따라 프로세스로 나눈다.

- 편리성 : 동시에 수행하므로 편리


아무튼간에 협력하는 프로세스들은 서로간에 자료와 정보를 교환하기 위해 프로세스 간 통신 기법을 필요로 한다. 이번 장에서 다룰 내용이 바로 프로세스간 통신이다. 여러 프로세스를 함께 수행하면 편리하기 때문에 프로세스간 통신이 필요하게 된 것이라고 보면 될듯하다. 프로세스간 통신에는 기본적으로 (1)공유 메모리와 (2)메세지 전달의 두 가지 모델이 있다. 두 개의 모델에 대해 간략히 소개하고 시작하자.


(1)공유메모리

- 통신의 최대속도 및 편의성을 제공해 준다.

- 메모리 속도 수준으로 구현이 가능하다.

- 때문에 메세지 전달보다 신속하다.

(2)메세지 전달

- 충돌이 발생하지 않아야 하기 때문에, 소량의 데이터 교환에 유용하다. (커널이 개입되기 때문에 많은 시간 소요)

- 공유메모리 모델보다 구현이 쉽다.



< a : 메세지 전달 / b : 공유 메모리 >





-미완성-

Posted by twinjh
OS2013. 1. 16. 15:33

프로세스의 연산

 

대부분의 프로세스들은 동시에 수행(병행 수행)될 수 있다. 프로세스들은 동적으로 생성(fork연산)되고 제거(exec연산)되어야 한다. 그러므로 운영체제는 프로세스 생성 및 종료를 위한 기법을 제공해야 한다. 여기서는 프로세스 생성기법인 forkexec연산에 대해서 이야기하고자 한다.

 

프로세스 생성

 

실행 중인 프로세스는 프로세스 생성 시스템 호출(fork)을 통해서 다수의 새로운 프로세스를 생성할 수 있다. 이때  새로운 프로세스를 생성하는 프로세스를 부모 프로세스 라고 부르고, 새로 생성된 프로세스는 자식 프로세스라고 한다. 새로 만들어진 프로세스는 다시 자식 프로세스를 생성할 수 있으며, 결과적으로 트리 구조를 만들게 된다.

 

부모 프로세스 : 새로운 프로세스를 생성하는 프로세스

자식 프로세스 : 부모 프로세스로부터 생성된 프로세스

 

대부분의 운영체제들은 여러 개의 프로세스를 식별하기 위해서 각각의 프로세스마다 프로세스 식별자(pid)를 부여한다. PID는 전형적으로 정수이다. 아래 그림처럼 각각의 프로세스는 자신만의 pid를 갖는 것을 볼 수 있다

 


 

< 전형적인 Solaris 시스템의 프로세스 트리 >

 

 

프로세스 생성 시 부모-자식 사이의  몇 가지 관계

 

1. 자원을 공유하는 세 가지 가능성

- 부모와 자식은 모든 자원을 공유한다.

- 자식은 부모 자원의 일부분을 공유한다.

- 자식은 운영체제로부터 직접 자원을 할당 받는다. (부모-자식 사이엔 어떤 자원도 공유하지 않는다)

 

프로세스가 어떤 작업을 하기 위해서는 자원(메모리, CPU, 파일, /출력 장치...)이 필요하다. 어떤 프로세스가 하위 프로세스를 생성할 때, 서브프로세스는 운영체제로부터 직접 자원을 얻거나, 부모 프로세스 자원의 일부를 사용할 수 있다.자식 프로세스가 부모 자원의 일부분만을 사용하도록 제한하면, 어떤 프로세스가 너무 많은 서브프로세스를 만들어 시스템이 과부하 되는 것을 방지할 수 있다.

 

2. 실행과 관련하여 두 가지 가능성

- 부모가 계속해서 자식과 병렬로 실행된다.

- 부모가 모든 자식 또는 일부 자식이 끝날 때까지 기다린다.

 

3. 주소 공간 측면에서 두 가지 가능성

- 자식 프로세스는 부모 프로세스의 복사본이다. (자식 프로세스는 부모와 똑같은 프로그램과 데이터를 가진다)

- 자식 프로세스가 자신에게 적재될 새로운 프로그램을 갖고 있다.

 

 

3번의 이해를 돕기 위해서 UNIX 시스템을 예로 설명을 해보자

UNIX에서 새로운 프로세스는 fork() 시스템 호출로 생성된다. 또한 기본적으로 프로세스가 새로 생성되면 그 프로세스는 부모 프로세스 주소 공간의 복사본으로 구성된다.(이 메커니즘은 부모 프로세스가 자식 프로세스와 쉽게 통신할 수 있게 한다.) 프로세스가 생성되고 나면, 부모 자식 두 개의 프로세스들은 fork() 연산 다음 명령어부터 실행을 계속하며, 부모의 fork()함수는 자식 프로세스의 pid를 리턴하고, 새로 생성된 자식 프로세스안의 fork()함수는 '0'이 리턴 된다. fork()명령어 후에 exec()시스템 호출로 다른 프로그램의 실행파일인 이진 파일을 메모리에 적재하고, 그 프로그램의 실행을 시작한다. 이때, exec() 시스템 호출을 포함하는 원래 프로그램의 메모리 이미지는 파괴된다. 이런 식으로 새 프로세스가 생성되면 그 프로세스의 주소공간을 부모의 복사본으로 넣을 수도, 새로운 프로그램으로 대체할 수도 있다.


 

프로세스 종료


프로세스 종료는 exit()시스템 호출로 요청된다. 이 시점에서, 프로세스는 자신의 부모 프로세스에게(wait()를 통해) 상태 값을 반환할 수 있다. 프로세스가 종료되면 해당 프로세스의 모든 자원이 운영체제로 반환된다. 프로세스는 다양한 이유로 인해 종료될 수 있지만 부모프로세스의 관점에서 종료를 시킨다고 했을 때, 자식이 할당된 자원을 초과사용하거나 더 이상 작업을 하지 않을 때 부모는 자식을 종료시킬 수 있다. 프로세스 종료 시스템 호출에 대해서 자세하게 알고 싶다면 http://twinjh.tistory.com/8 여기서 보세요.

 

 

 

 

Posted by twinjh
기타2013. 1. 10. 14:18

암호(Cipher)란?

암호란 평문(Plaintext)을 해독 불가능한 형태인 함호문(Ciphertext)으로 변형하거나, 암호화된 통신문을 해독 가능한 형태로 변환하기 위한 원리, 수단, 방법 등을 취급하는 기술이다. 이를 학문적인 관점에서 다룰 때 보통 암호학(Cryptography)이라 일컫는다. 암호학은 암호와 암호 해독에 관해 연구하는 학문으로 현대 암호학은 컴퓨터 과학, 전자공학, 통신공학, 수학 및 통계학, 물리 등의 여러 분야와 직/간접적으로 관련되어 있으므로 안전한 암호 시스템을 설계/구현 하기 위해서는 위에 열거된 학문에 대한 기초지식을 지니고 이해해야 한다.


암호학은 매우 오랜 역사를 갖고 있다. 약 4,000년 전에 고대 이집트인들은 가장 기본적인 정보 은닉(Information Hidding)의 개념으로부터 출발하여 로마시대의 시이저 암호(Caeser Cipher)를 거쳐 1,2차 세계 대전을 통해 크게 성장하였다. 최근에는 인터넷의 급속한 확대로인해 암호학의 중요성이 크게 인식되고 있다.


암호의 역사


(1) 고대 암호


고대 그리스에서는 노예의 머리를 깎아 통신문을 머리에 작성하고 머리카락이 길어질 때까지 기다렸다가 제 3자에게 발견되지 않게 상대방에게 노예를 보낸 후, 다시 머리를 깎아 통신문을 읽을 수 있도록 했다고 한다. 또한 과일즙으로 글자를 써서 전달한 후 열을 가하면 나타나도록 하는 방법도 사용하였다... 암호라고 부르기에는 부족한 이 방법들은 엄밀히 말하면 스테가노그래피(Steganography)라고 한다.


일반적으로 고대 암호와 근대 암호는 평문에서 다른 문자로 치환하는 치환 암호(Substitution Cipher)와 평문에서 문자의 위치를 변화시켜 사용하는 전치 암호(Transposition Cipher), 그리고 전치 암호와 치환 암호를 결합하여 사용하는 적 암호(Product Cipher)로 분류한다.  전치 암호의 가장 오래된 방식은 B.C. 500년경 고대 그리스의 스파르타에서 전쟁중에 군사적인 목적으로 사용한 Scytale 암호이다. 이 방식은 전달하려는 평문을 재배열하는 방식으로 막대에 종이를 감아서 그 위에 가로로 글을 쓴다음 종이를 풀면 문자가 재배치 되어서 평문의 내용을 인식할 수 없게 된다.


< Scytale Cipher >


최초의 치환 암호는 로마 시대의 Julius Caesar가 사용한 Caesar 암호이다. 이 암호는 평문의 각 문자를 우측으로 n 문자씩 이동시켜 그 위치에 대응하는 다른 문자를 치환함으로써 평문을 암호문으로 변환하는 암호 방식이다.



< Caesar Cipher >


예를 들어 I LOVE SONYA 라는 문장을 각각의 방법으로 암호문으로 만들어 보도록 하겠다.


Caesar Cipher

(n=3)


위 표에 따르면 다음과 같이 암호화 할 수 있다.


평문 : I LOVE SONYA

암호문 : L ORYH VRQBD


Scytale Cipher




위 표에 따르면 다음과 같이 암호화 할 수 있다.


평문 : I LOVE SONYA

암호문 : IVO ENL YOSA


(2) 근대 암호


근대의 암호는 앞에서 말한 것과 같이 세계 대전과 컴퓨터의 발달로 인해서 암호학 연구가 활발하게 이루어지면서 나타났다. 프랑스 암호학자 Blaise de Vigenere 가 고안한 Vigenere암호, 영국군이 사용했던 C. Wheatstone이 만든 Playfair 암호 등 암호 설계와 해독에 관한 연구가 활발히 추진되었다. Shannon은 확률론을 기초로 한 정보이론의 창시자로서 이론적으로 해독이 불가능한 암호 방식을 제안하고, 그 안정성을 평균 정보량을 이용하여 수학적으로 증명하기도 했다. 또한, 강안 함호 알고리즘은 약한(단순한) 암호 알고리즘을 여러 번 반복하여 얻을 수 있다는 것을 보임으로써 확산(Diffusion)과 혼동(Confusion)을 반복하여 안전한 암호를 구현하는 방안을 제시하여 현대의 암호 알고리즘 구조에 지대한 영향을 미쳤다고 한다. 여기서는 근대의 암호화 방법 중에 대표적인 방법인 Vigenere의 방법을 소개하고 넘어가도록 하겠다.


Vigenere Cipher


Vigenere 암호는 16세기 Vigenere가 고안한 암호로 암호키로써 영단어를 선택하고 평문을 해당되는 문자로 바꾼 다음, 각 문자에 대응하는 문자를 평문에 평문에 반복적으로 더하여 얻는 암호문이다. 즉, Caesar 암호를 확장하여 여러 개의 키를 문자 각각에 대해 적용하여 암호화/복호화하는 형태이다. 이는 Caesar 암호와 같이 평문의 각 문자에 일률적으로 대응하는 방법보다 평문의 각 문자에 대해 불규칙적으로 대응하기 때문에 훨씬 안전하다. 하지만 이 방법은 키의 길이가 짧으면 간단하게 깨진다는 약점이 있다.



위 변환표에 따라 암호화를 수행하면 다음과 같다.


평문 : I LOVE SONYA

키 : E NCRY PTION

암호문 : M YQMC HHVMN


(3) 현대 암호


현대 암호는 크게 비밀키 암호 방식공개키 암호 방식으로 구분된다. 비밀키 암호 방식은 암호화키가 동일한 키를 사용하기 때문에 송신자와 수신자가 비밀 통신을 하기 전에 키를 사전 분배하여 보관하고 있어야 한다. 반면에, 공개키 암호 방식은 암호화키와 복호화키를 분리하여 암호화키는 공개하고 복호화키는 비밀리에 보관하도록 되어 있다. 이 방식은 송신자가 수신자에게 평문을 암호화하여 전송하려고 할 때, 수신자의 공개키로 평문을 암호화하여 전송하고, 수신자는 자신이 비밀리에 가지고 있던 복호화키(개인키)로 암호문을 복호화 한다. 공개키 암호 방식은 비밀키 암호 방식과 달리 암호화키를 사전에 전송할 필요가 없어 불특정 다수 사이에서 암호 통신망을 구축할때 용이하다.



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

크롬 북마크 복원  (0) 2013.11.02
LENOVO 아이디어패드 YOGA 13(요가 13 불량? 단점?)  (3) 2013.01.03
Posted by twinjh
OS2013. 1. 9. 16:09

프로세스 개념

초기의 컴퓨터 시스템은 한 번에 하나의 프로그램만을 수행하도록 허용하였다. 반면에 오늘날 우리가 사용하는 컴퓨터 시스템은 메모리에 다수의 프로그램들이 적재되어 병행 수행되는 것을 허용한다. 이런 발전으로인해 프로세스의 개념이 생기게 되었다. 이쯤에서 프로세스의 정의를 짚고 넘어가자.


프로세스 : 수행중인 프로그램


프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다. 프로세스는 현대의 시분할 시스템에서 작업의 단위이므로, 작업(task, job)이라는 용어와 거의 같은 의미로 쓰인다.


메모리 내의 프로세스

프로세스는 다음을 포함한다(즉, 메모리에 로드 될 수 있는 프로세스는 다음과 같은 구조를 가질 수 있다.)

- 프로그램 카운터 : 다음에 실행될 명령어의 주소를 가지고 있다.

- 현재 활동 : 프로세스 레지스터의 내용

- 스택 : 일반적으로 함수의 매개변수, 복귀 주소, 지역 변수와 같은 임시적인 자료

- 데이터 섹션 : 전역 변수들을 포함

- 힙 : 프로세스 실행중에 동적으로 할당되는 메모리




< 메모리 상의 프로세스 : 프로세스가 포함하는것 >

프로세스 상태

프로세스는 또한 실행되면서 그 상태가 변하기도 한다. 다음은 프로세스가 가질수 있는 상태의 목록이다.

- 신설(new) : 프로세스 생성

- 수행(running) : 명령어가 실행 중 이다.

- 대기(waiting) :  프로세스가 이벤트 발생을 기다리고 있다.

- 준비(ready) : 프로세스가 자신에게 프로세서(CPU)가 할당되기를 기다리고 있다.

- 종료(terminated) : 프로세스가 실행을 완료했다.



< 프로세스 상태도 >


PCB(프로세스 제어 블록)

각 프로세스는 운영체제 내에서 프로세스 제어 블록에 의해서 표현된다.



< 프로세스 제어 블록(PCB) >


- 프로세스 상태

- 프로그램 카운터


- CPU 레지스터들 : CPU 레지스터는 컴퓨터의구조에 따라 다양한 개수와 유형을 가진다. 레지스터에는 누산기, 색인 레지스터, 스택 레지스터, 범용 레지스터, 상태 코드 정보가 포함된다. 프로그램 카운터와 함께 이 상태 정보는 나중에 프로세스가 계속 올바르게 수행되도록 하기 위해서, 인터럽트 발생 시 저장되어야 한다.


- CPU 스케줄링 정보

- 메모리 관리 정보

- 회계 정보 : 이 정보는 CPU가 사용된 양과 사용된 실시간, 시간 제한, 계정 번호, 프로세스 번호 등을 포함한다.

- 입/출력 상태 정보 : 이 프로세스에 할당된 입/출력 장치들과 열린 파일의 리스트 등을 포함한다.


자 그럼 PCB가 왜 나왔는지, 왜 필요한지 생각해보자. 우리는 시분할 기법을 사용함으로서 멀티 태스킹을 할 수 있다. 즉, 우리가 음악을 들으면서 문서작업을 동시에 할 수 있는 것이 바로 멀티 태스킹이라고 생각하면 된다. 하지만 사용자가 보기에는 모든 작업이 동시에 이루어지는 것 같지만 실제로는 CPU가 밀리세컨드 단위로 작업을 돌아가면서 수행하기 때문에 우리가 그렇게 느끼는 것이다. 이처럼 CPU가 작업을 돌아가면서 할 때 음악 프로세스에서 문서 프로세스로의 내용 전환(context switch)이 일어난다. 내용 전환 시에 필요한 것이 바로 프로세스의 상태들이다. 즉 위에서 언급했던 음악 프로세스의 내용들을 문서 프로세스의 내용으로 바꿔야 CPU가 문서 작업을 할 수 있는 것이다. 만약 이런 상태들이 저장되지 않는다면 음악을 어디까지 들었는지 문서를 얼마나 작성했는지와 같은 정보들을 전혀 모르게 되는 것과 비슷하다고 생각하면 이해가 쉬울지도 모르겠다.




< CPU의 내용 전환(context switch) >


요약하자면 프로세스 제어 블록은 단순히 프로세스마다 변하는 모든 정보에 대한 저장소의 역할을 한다.


프로세스 스케줄링


다중 프로그래밍의 목적은 CPU의 사용률을 최대화 하는 것이다. 여러 개의 프로그램(프로세스)을 메모리에 올려 하나의 프로그램이 입출력 작업을 수행 중인 경우(CPU의 연산이 필요하지 않는경우를 뜻한다) CPU가 다른 프로세스를 수행함으로써 CPU가 항상 어떤 프로세스든지 실행중이게 한다는 방법이다. 이것이 가능하기 위해선 앞에서 말했던 시분할이 이루어져야 한다. 시분할은 내용 전환을 하면서 현재 수행할 프로세스를 바꾸는 것이라고 했는데, 내용 전환을 하기 위해 다음에 어떤 프로세스를 수행할 것인지를 설정하고 관리하는 것이 바로 프로세스 스케줄링(CPU 스케줄링)이라고 할 수 있을 것이다.


프로세스 스케줄링 : 다중 프로그래밍을 가능하게 하는 운영체제의 동작 기법. 운영체제는 프로세스들에게 CPU등의 자원 배정을 적절히 함으로써 시스템의 성능(사용률 등)을 개선할 수 있다.


스케줄링 큐

프로세스들은 여러 큐들을 이동하며 스케줄링 된다.


- 작업 큐 : 시스템 내에 있는 모든 프로세스 집합

- 준비 큐 : 주 메모리에 상주하면서 실행될 준비를 하고 있는 프로세스 집합

- 장치 큐 : 입출력 장치를 기다리고 있는 프로세스 집합



< 프로세스 스케줄링을 표현하는 큐잉 도표 >


위 그림처럼 프로세스들은 여러 큐들 이동하면서 스케줄러가 정한 순서에 맞춰서 작업을 수행한다. 그럼 이제 프로세스 스케줄링을 하는 스케줄러의 종류에 대해서 이야기 해보자.


스케줄러

- 장기 스케줄러 ( Long-term scheduler) : 디스크로부터 주 메모리 상의 준비 큐로 옮겨질 프로세스들을 선택한다.

- 단기 스케줄러 (Short-term scheduler) : 준비 큐에 있는 어떤 프로세스가 다음 차례에 수행될지 선택하여 CPU를 할당한다.


풀어서 말하면, 장기 스케줄러는 하드 -> 주 메모리 

단기 스케줄러는 주 메모리 -> CPU 이렇게 프로세스를 이동시킨다는 것이다.


우리가 말하는 다중 프로그래밍의 정도(몇 개의 혹은 어떤 프로세스가 주 메모리에 상주할 것인가)를 제어하는 것이라고 보면 된다. 하드에서 메인 메모리로 로드하는 것은 꽤 느린 편이다. 때문에 장기 스케줄러는 신중히 프로세스를 메인 메모리로 로드해야 한다. 그래서 장기 스케줄러는 입/출력을 많이하는 프로세스(입출력 결속 프로세스)와 CPU연산을 많이 필요로하는 프로세스(CPU결속 프로세스) 두 가지를 적절히 선택하여 메인 메모리로 로드하는 것이 중요하다.


- 중기 스케줄러 (medium-term scheduler) : 스와핑을 한다. ( 사용하지 않는 프로세스들을 제거하여 다중 프로그래밍 정도를 줄이고, 이 프로세스는 후에 다시 메모리로 올라와 수행을 계속할 수 있다. )


중기 스케줄러는 유닉스와 윈도우XP와 같은 시분할 시스템에서 주로 사용되며, 이 시스템에서 장기 스케줄러는 사용되지 않는다. 이 외에도 중기 스케줄러에 대한 많은 설명이 있지만 이 정도로 설명을 마친다.



< 큐잉 도표에 중기 스케줄링을 추가 >





'OS' 카테고리의 다른 글

3-1. 프로세스 : 프로세스의 연산  (1) 2013.01.16
2-3. 운영체제 구조  (0) 2013.01.03
2-1. 운영 체제 구조 : 운영체제 서비스, UI  (0) 2012.12.30
1. Introduction  (0) 2012.12.30
Posted by twinjh
OS2013. 1. 3. 23:59

운영체제 설계 및 구현


이번에는 운영체제를 설계하고 구현할 때 우리가 당면하는 문제점을 논의한다. 물론 이런 설계 시 문제점에 대한 완전한 해결책은 없지만 성공적인 접근 방법들이 있다. 시스템을 설계하는데 있어 가장 크다고 할 수 있는 문제점은 시스템의 목표와 명세를 정의하는 일이다. 이런 목표와 명세는  하드웨어와 시스템 유형으로 어떤 것을 선택하는지에 영향을 받는다. 일괄처리, 시분할, 단일 사용자, 다중 사용자, 분산, 실시간 등 여러 유형의 시스템이 있기 때문에 목표와 요구명세를 정의하는 것이 어렵다고 하는 것이다. 


한줄 요약=> 운영체제에 대한 요구 정의 문제를 해결하는 유일한 해법은 없다.


원래 이런 분야는 소프트웨어 공학에서 다루는 것이므로 지금은 이정도만 하고 넘어가도록 한다.

하지만 운영체제 설계 시에 한 가지 중요한 원칙이 있는데 바로 메커니즘으로부터 정책을 분리하는 것이다. 


메커니즘 : 어떤 일을 어떻게 할 것인가를 결정하는 것

정책 : 무엇을 알 것인가를 결정하는 것


메커니즘으로부터 정책을 분리하는 것이 왜 중요하냐면, 정책을 변경해야하는 경우에 정책 밑에 깔린 모든 메커니즘의 변경이 요구되기 때문이다. 예를 들어 타이머 구조는 CPU 보호를 보장하기 위한 메커니즘이지만, 특정 사용자를 위해 타이머를 얼마나 오랫동안 설정할지를 결정하는 것은 정책적 결정이다. 타이머를 설정한다고 CPU보호가 불가능하면 안 된다는 것이다.


운영체제 구조


현대의 운영체제와 같이 크고 복잡한 시스템은 변경을 쉽게 하도록 신중히 제작되어야 한다. 때문에 운영체제의 구조가 잘 설계 되어있어야 변경이 쉽고, 적절하게 동작한다. 이 절에서는, 운영체제의 구조 4가지를 살펴 볼 것이다.


1. 간단한 구조


잘 정의된 구조를 갖지 못한 상용 시스템이 많이 있다. 종종 그러한 운영체제는 처음에는 소형이면서 간단하고 제한된 시스템으로 시작되어서 그런 구조여도 문제가 없었지만, 점점 시스템이 커지면서 문제가 된 것이다. 그러한 예로 MS-DOS가 있다.



< MS-DOS 계층 구조 : 인터페이스와 기능 계층이 잘 분리되어 있지 않다.>


MS-DOS는 인터페이스와 기능 계층이 잘 분리되어 있지 않는데, 최소의 공간에 최대의 기능들을 제공하도록 작성되어 있어서, 모듈로 분할되지 않았다. 변경을 하고자 하는 경우 모듈이 아니기 때문에 전체적인 수정이 필요할 수도 있다. 때문에 변경이 용이하지가 않은 것이다.

ex) MS-DOS의 응용 프로그램은 디스플레이와 디스크에 직접 쓰기가 가능하다. 이런 자유는 바이러스와 같은 악의적인 프로그램으로부터 취약하게 만들었다. 따라서 사용자 프로그램이 문제가 생기면 시스템 전체가 고장 나게 된다.


MS-DOS와 같이 제한적인 구조의 또 다른 예는 UNIX 운영체제이다. 초기의 유닉스는 다음 그림과 같이 계층들로 이루어졌다고 볼 수 있다.(현재는 발전하면서 추가/확장된 것이다.)



< UNIX 시스템 구조 >


아래서 두 번째 층이 커널인데 층이라고 하기에는 너무 많은 기능이 들어있다. 계층들로 이루어져 있지만 간단하기 때문에 간단한 구조로 간주하는 듯하다.


2. 계층적 접근


운영체제 시스템은 여러 계층((layer, level)으로 구분된다.

- 최하위 계층(layer 0) : 하드웨어

- 최상위 계층(layer N) : 사용자 인터페이스

모듈화를 통해, 각 계층은 바로 아래 계층에서 제공하는 기능과 서비스만을 사용한다.

- 계층은 하위 계층에 대한 연산을 호출할 수 있다.



< 계층 구조의 운영체제 >

장점

- 구축과 디버깅의 단순함

- 설계와 구현이 단순하다

- 각 계층은 하위 계층에서 제공하는 연산만을 통해 구현된다

- 각 계층은 이 연산들이 어떻게 구현되는지 알 필요가 없다


단점

- 다양한 계층들이 대략적으로 정의된다

- 각 계층은 오직 하위 계층들에서 제공하는 기능만을 사용하기 때문에, 주의 깊은 계획이 요구된다 => 예로 예비 저장 장소를 위한 장치 드라이버는, 메모리 관리가 예비 저장 장소를 사용할 수 있는 능력을 필요로 하기 때문에 메모리 관리 루틴들보다 저수준에 있어야 한다.


3. 마이크로커널


커널을 가능한 한 경량화한다. 

- 많은 기능을 커널로부터 user space로 이동한다

- 커널과의 통신은 사용자 모듈 사이에서 메세지 전달을 통해 이루어진다


장점

- 마이크로 커널을 확장하기 쉽다

- 운영체제를 새로운 구조로 이식하기 쉽다

- 커널에서 수행되는 코드가 더 적으므로 더 안정적이고 더 안전하다

단점

- 커널 공간과 통신하기 위한 사용자 공간의 성능 오버헤드 발생


4. 모듈


대부분의 현대 운영체제는 커널 모듈을 구현한다

- 커널은 핵심 컴포넌트들로 이루어지며 부팅 시나 실행 시에 부가적인 서비스들을 동적으로 연결한다

- 객체 지향 접근을 샤용한다

- 각 핵심 컴포넌트는 나뉘어져 있다

- 각 컴포넌트는 정해진 인터페이스를 통해 다른 컴포넌트와 대화한다

- 각 컴포넌트는 커널내에서 필요에 따라 적재 가능하다

=>결론적으로, 계층 구조와 유사하나 더 유연하다.



< 솔라리스 모듈화 접근법 >


모듈화 커널 접근법은 계층구조 접근법과 유사하다

- 모듈화 커널 접근법은 서브시스템들이 서로 정해진 인터페이스를 통해 상호작용하도록 요구한다


하지만 계층적 커널은 하위 계층에 있는 서브시스템들이 상위 계층 연산의 호출을 허용하지 않는 엄격한 서브시스템의 순서를 가지고 있다. 반면 모듈화 커널 접근법에서는 이런 제약이 없어서 모듈들이 서로 자유롭게 호출할 수 있다.








Posted by twinjh
기타2013. 1. 3. 16:07

요즘 윈도우8 노트북 사시려고 알아보고 계신 분들을 위한 팁글입니다.


윈도우8 노트북 혹은 태블릿들이 몇 가지 있는데요. 그 중에 저는 요가 13 오랜지 색상 사게 되었습니다.


사용1주일째 문제점 혹은 불편한 점과 장점을 알려드리도록 하겠습니다.


장점


180도 회전 : 요가는 이걸로 시작해서 이걸로 끝나는 듯 합니다. 화면 회전 덕분에 누워서도 할 수 있을 정도입니다.



불편한점(단점)


1. 내부 고주파 소음

제꺼만 불량인지는 모르겠으나 첫 번째 불편한 점입니다.

주변에서 다른 소리가 들리는 경우에는 감지를 못하지만 집이나 독서실 같은 조용한 장소에서 고주파음이 들립니다. 그것도 꽤나..


2. 키보드 불량


울트라북 표준에 맞추다 보니 붉은 박스 표시 부분아래 공간이 비어있는 상황입니다.

때문에 다른 부분을 타이핑 하는 것 보다 소리가 크게 나고 키감도 좋지 않습니다.

또 키를 눌렀을 경우 주변이 같이 눌리는 모습을 볼 수 있습니다.



영상첨부 합니다.





처음에 불량인줄 알고 서비스 센터에 가서 따져 보았지만 제품자체가 이렇게 나온다고 하더군요. 다른 제품까지 확인해 보지는 않았지만 그들이 그렇다고 했으니 저는 그말 그대로 이 글에 씁니다. 고주파 소음은 그렇다고 치고 이건 큰 결점인것 같습니다. 서비스 센터 엔지니어분 께서는 서비스 차원에서 키보드 아래 보충제를 넣어서 해결해 주겠다고만 하였습니다. 역시나 as는 대기업에 뒤쳐지는 것 같습니다. 예전에 마이크로 소프트 아크 터치 마우스(약 5만원대) as보냈더니 새제품으로 보내주었던 것 과는 차원이다르네요..


마지막으로 생각보다 환기팬 돌아가는 소리도 큰 것 같습니다. 역시 조용한 곳에서만 해당되는 것입니다.







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

크롬 북마크 복원  (0) 2013.11.02
암호학의 역사  (0) 2013.01.10
Posted by twinjh
카테고리 없음2013. 1. 3. 15:40

시스템 호출(System call)


정의 : 프로세스가 운영체제와 통신하기 위한 유일한 방법.


앞에서 운영체제가 제공하는 서비스들을 살펴보았는데, 이런 서비스에 대한 프로그래밍 인터페이스(Programming Interface : PI)를 제공하는 것이 바로 시스템 호출이다. 시스템 호출은 특정 저수준 작업(하드웨어를 직접 접근하는 작업 등)은 어셈블리 명령을 사용하여 작성되어야 하지만, 일반적으로 C, C++같은 고급 언어로 작성된 루틴 형태로 제공된다.


일단 시스템 호출이 어떻게 사용되는지를  알아보자.


시스템 호출 과정


<파일의 내용을 다른 파일에 복사하는 시스템 호출 순서>


위에서 보듯, 간단한 프로그램이라도 운영체제를 많이 사용하게 된다. 어쩌면 종종 초 당 수천 개의 시스템 호출을 수행하게 된다. 하지만 대부분의 사용자들은, 이 정도로 상세하게 알지 못한다. 대부분의 응용 프로그램 개발자들은 응용 프로그래밍 인터페이스(Application Programming Interface, API)에 따라 프로그램을 설계한다. 호출자는 시스템 호출이 어떻게 구현되고 실행 중 무슨 작업이 일어나는지 아무 것도 알 필요가 없다. 단지 API를 준수하고 시스템 호출의 결과로 운영체제가 무엇을 해 줄 것인지만 이해하면 된다. 따라서 운영체제 인터페이스에 대한 대부분의 자세한 내용은 API에 의해 프로그래머로부터 숨겨지고 실행시간 지원 라이브러리에 의해 관리된다. 실행시간 지원 시스템은 운영체제가 제공하는 시스템 호출에 대한 연결로서 동작하는 시스템 호출 인터페이스를 제공한다. 시스템 호출 인터페이스는 API함수의 호출을 가로채어 운영체제 시스템 호출을 부른다. 간단하게 정리하자면 System call Interface는 커널에 서비스를 요청하거나 하드웨어를 조작하고자 하는 명령이 발생하면 인터럽트(Software Interrupt)를 읽어 해당 함수를 호출하여 주는 것을 말한다. 다음 그림을 보면 이해가 더 쉽다.





< open() 시스템 호출을 호출한 사용자 응용의 처리 >


위 그림은 API를 준수하여 작성된 사용자 응용 프로그램이 있을 때, 해당 프로그램에서 open 시스템 콜을 호출하는 명령어가 있다고 하자. 해당 명령어는 목적에 맞는 시스템 콜을 미리 정의되어 있는 라이브러리에서 캐치한다. 라이브러리가 시스템 호출 색인과 매개변수를 받으면 소프트웨어적인 인터럽트를 발생시킨다. 여기서 말하는 라이브러리가 바로 시스템 호출 인터페이스라고 보시면 된다.

추가적으로 설명을 하자면 그림의 아래보이는 사각형은 시스템 호출 함수들이 색인되어 테이블에 저장된 것이라고 보면 된다. 앞에서 라이브러리가 시스템 호출 색인을 받는다고 하였는데, 테이블에서 색인 번호에 해당하는 시스템 콜 함수를 불러온다고 생각하면 될 것이다.




< 시스템 호출 in C language >


시스템 호출 - 매개변수 전송


위 그림에서 볼 수 있듯, 시스템 호출 시에 매개변수가 전달되기도 한다. 운영체제는 이 매개변수를 전달하기위해서 일반적으로 세 가지 방법을 사용한다.


1. 레지스터를 통한 전송

- 매개변수가 레지스터로 직접 전달되나, 레지스터 크기보다 더 많은 매개변수가 존재하므로 좋지 않은 방법.


2. 블록 or 테이블을 통한 전송

- 매개변수가 메모리 내의 블록이나 테이블에 저장되고, 해당 주소가 레지스터의 매개변수로 전달된다.


3. 스택을 통한 전송

- 매개변수는 프로그램에 의해 스택에 넣어지고(push), 운영체제에 의애 꺼내진다.(pop off)


보통 운영체제는 두 번째 방법을 선호하는데, 이 접근법은 전달되는 매개변수들의 개수나 길이를 제한하지 않기 때문이다.



시스템 호출의 유형


시스템 호출은 다음과 같이 다섯 가지 유형으로 나뉠 수 있다.


1) 프로세스 제어

2) 파일 관리

3) 장치 관리

4) 정보 유지

5) 통신



Posted by twinjh