1. 이 기능의 필요성

물론 마우스로 선택한 후 복사나 붙여넣기를 해도 되지만..
이렇게 하면 vim이 아니라 시스템에서 처리하는 것이므로, 줄번호 까지 붙여 넣어집니다.
또, 마우스로 선택하는 것 보다는 키보드가 편할 뿐 더러, 마우스로 선택하면 자동으로 스크롤이 안됩니다.

2. 사전지식
v : 컬럼단위 비주얼모드
Shift+v : 줄단위 비주얼모드
Ctrl+v : 블럭 비주얼모드

v 키를 다시 누르면 정상모드로 복귀합니다.

비주얼모드에서 화살표로 이동한 후 y로 vim내의 클립보드로 복사할 수 있습니다.
블럭단위가 아닐경우 Y키를 누르면 줄단위로 vim내의 클립보드로 복사 됩니다.
그리고 난 후 p키로 뒤에, P키로 앞에 붙여넣을 수 있습니다.

vmap, vnoremap 명령은 키매핑을 비주얼모드에서만 동작하게 합니다.
편집모드에서 Ctrl+v키는 특수문자 입력키이므로, v[nore]map으로 매핑하면
편집모드에서는 특수문자 입력키로 사용됩니다.

3. 준비작업
시스템 클립보드와 연동하기 위해선 클립보드에서 얻기및 붙여넣기를 할 수 있는 프로그램이 필요합니다.

Code:
sudo apt-get install xclip

4. vim에 기능 추가

#~/.vimrc의 내용
Code:
"붙여넣기시 자동들여쓰기를 하지 않게함
set paste
"붙여넣기 모드 선택키
set pastetoggle <Ins>

"yank후에 마크위치로 이동하기에, 다시 커서를 이동시킴
vnoremap y y`>
"라인단위 yank후에 마크위치로 이동하기에, 다시 커서를 이동시킴
vnoremap Y Y`>
"붙여넣기 후 붙여넣기된 끝으로 커서이동
noremap p p`]

"비주얼블럭의 내용을 클립보드로 붙여넣기
vmap <C-c> y:call system("xclip -i -selection clipboard", getreg("\""))<CR>

"Control+v키가 비주얼 블럭모드 키라서 Control+w로 대체 (에디트플러스의 Alt+w에서 착상)
noremap <C-w> <C-v>

"클립보드의 내용을 vim으로 붙여넣기
map <C-v> :call setreg("\"",system("xclip -o -selection clipboard"))<CR>p

'Embedded Lab > linux, x86' 카테고리의 다른 글

[LVM(Logical Volume Manager)]  (0) 2012.11.01
[우분투에서 환경변수 설정하기]  (0) 2012.10.30
[우분투 클립보드 프로그램]  (0) 2012.10.26
[diff 사용법]  (0) 2012.10.26
[find]  (0) 2012.10.18
Posted by cyj4369
,

나를 포함해서 많은 사람들이 윈도우 시스템에 익숙해져 있다. 우분투를 사용하면서 불편한것중 하나가 클립보드로 데이터를 복사한 프로그램이 종료하면 클립보드에 있는 데이터 역시 사라진다.

그러나 윈도우는 클립보드에 데이터를 복사하면, 클립보드로 복사한 프로그램의 종료 유무와 상관없이 다른 프로그램에서 사용할 수 있다. 아마도 클립보드의 개념은 우분투에서 사용하는 클립보드 보다는 윈도우 시스템에서 사용하는 클립보드가 더 맞는 개념 갖다.

운영체제에서 사용하는 클립보드 역시 하나의 프로그램이다. 따라서 기본으로 설치되어 있는 우분투 시스템의 클립보드를 확장하면 윈도우의 클립보드와 같이 사용할 수 있다.

sudo apt-get install autocutsel

우분투에서 autocutsel 이라는 프로그램을 설치하면 윈도우 시스템에서와 같이 클립보드를 사용할 수 있다. 그러나 단 한가지 아쉬운점이라면, 이미지 데이터를 클립보드에 저장할 경우에 대해서는 이전과 동일하게 해당 프로그램이 실행중이어야한다.

Posted by cyj4369
,

<옵션 설명>

-u : 없어진 내용(-), 생긴 내용(+)을 구분해서 표현해준다. 소스파일 비교시 필수
-r : 재귀적으로 하위파일들까지 검사한다. 디렉토리 검사할 때 필요
-N: 새로 생긴 파일(빠진파일)에 대한 비교결과까지 보여준다.
--brief : 단순히 파일이 같은지만 확인

<예제>

diff -u a_rev1.c a_rev2.c > comp.diff

- 파일 a_rev1.c 와 a_rev2.c 파일을 비교


diff -urN dir1 dir2 > comp.diff

- 폴더 dir1 과 dir2 를 비교. 가장 일반적인 형태. 
- dir2 가 최신이어야 한다. 그래야 '+(추가된 코드)' 형식으로 나타내어짐. 아니면 거꾸로 됨


diff -ur dir1 dir2 > comp.diff

- 마찬가지로 두 폴더를 비교하는데, 빠진 파일에 대한 검사는 하지 않고 기존에 있는 파일들만 비교한다.
- 마찬가지로 dir2 가 dir1 에 대해 부분집합이어야 한다.
- dir1 이 기존의 완전한 형태의 소스 디렉토리이고, dir2 는 거기에 대해 추가되고 변경된 코드 디렉토리일 때 사용한다. 즉 dir1 이 많은 파일들, dir2 이 적은 파일들

Posted by cyj4369
,

[find]

Embedded Lab/linux, x86 2012. 10. 18. 18:32

파일 찾기 (파일명 검색)


현재 디렉토리에서, pl 확장자를 가진 모든 파일 찾기
find -name '*.pl'

(현재 디렉토리 밑의 하위 디렉토리까지 다 찾습니다.)


루트에서부터, 즉 전체 하드에서, pl 확장자를 가진 모든 파일 찾기
find / -name '*.pl'



전체 하드 디스크에서, 파일명이 ab 로 시작하는 모든 파일 찾기
find / -name 'ab*'



전체 하드 디스크에서, 파일명이 .bash 로 시작하는 모든 파일 찾기
find / -name '.bash*'



전체 하드 디스크에서, 파일명이 .bash 로 시작하는 모든 파일 찾기
+ ls 명령 형식으로 출력
find / -name '.bash*' -ls

뒤에 -ls 라는 옵션을 붙이면 됩니다.




디렉토리명 찾기


전체 하드 디스크에서, 디렉토리 이름이 et 로 시작하는 모든 디렉토리 찾기
find / -name 'et*' -type d


주의! 옵션 순서를 바꾸면 에러가 납니다.

Posted by cyj4369
,

이렇게 정의된 Makefile을 볼 수 있을 것이다.

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

여기에서 make, modules, clean은 target인 것 같고 나머지는 옵션... 같은데 미리 정의된 것인듯 하다. 이에 대한 설명이 없어 찾아본 결과 다음 경로에서 아래의 내용을 찾을 수 있었다.

커널 소스 내 Documentation/kbuild/module.txt

--- 2.2 Options
87	
88		($KDIR refers to the path of the kernel source directory.)
89	
90		make -C $KDIR M=$PWD
91	
92		-C $KDIR
93			The directory where the kernel source is located.
94			"make" will actually change to the specified directory
95			when executing and will change back when finished.
96	
97		M=$PWD
98			Informs kbuild that an external module is being built.
99			The value given to "M" is the absolute path of the
100			directory where the external module (kbuild file) is
101			located.
102	
103	--- 2.3 Targets
104	
105		When building an external module, only a subset of the "make"
106		targets are available.
107	
108		make -C $KDIR M=$PWD [target]
109	
110		The default will build the module(s) located in the current
111		directory, so a target does not need to be specified. All
112		output files will also be generated in this directory. No
113		attempts are made to update the kernel source, and it is a
114		precondition that a successful "make" has been executed for the
115		kernel.
116	
117		modules
118			The default target for external modules. It has the
119			same functionality as if no target was specified. See
120			description above.
121	
122		modules_install
123			Install the external module(s). The default location is
124			/lib/modules/<kernel_release>/extra/, but a prefix may
125			be added with INSTALL_MOD_PATH (discussed in section 5).
126	
127		clean
128			Remove all generated files in the module directory only.
129	
130		help
131			List the available targets for external modules.

'Embedded Lab > linux, x86' 카테고리의 다른 글

[diff 사용법]  (0) 2012.10.26
[find]  (0) 2012.10.18
[안드로이드용 Linux Kernel Source Code 받기]  (0) 2012.10.17
[모듈 만들어 올리기]  (0) 2012.10.16
[error가 있는지 확인 출력]  (0) 2012.10.15
Posted by cyj4369
,

올해 초 안드로이드용 리눅스 커널 소스코드 받는 법에 대하여 포스팅한 적이 있다. (링크)

그런데 9월 경에 안드로이드 Git 서버가 해킹을 당하고 나서 커널 소스코드를 받을 수 있는 방법이

봉쇄되어 버렸고(서버 복구 작업에 의해) 한동안 코드를 받을 수가 없었다.

그런데 오늘 확인해 보니 드디어 안드로이드의 커널을 받을 수 있도록 오픈이 되었다. (링크)

Git에서 소스코드를 받는 방법은 주소만 다를 뿐 다른 부분은 전과 동일하다.
1. git clone 실행
  [taehyo@mdbuild:~/ics-4.0/kernel]# 
git clone https://android.googlesource.com/kernel/common.git [복사할 디렉터리명]

2. git branch -a 로 다운로드 가능한 브랜치 확인
  [taehyo@mdbuild:~/ics-4.0/kernel]# git branch -a

3. git checkout으로 소스코드 체크아웃
  [taehyo@mdbuild:~/ics-4.0/kernel]# git checkout -b android-3.0 remotes/origin/android-3.0


진저브레드용 커널을 받고자 한다면 remotes/origin/android-2.6.39 브랜치를

아이스크림샌드위치용 커널을 받고자 한다면 remotes/origin/android-3.0 브랜치를 선택하면 된다.


http://taehyo.egloos.com/4170886

'Embedded Lab > linux, x86' 카테고리의 다른 글

[find]  (0) 2012.10.18
[Makefile의 미리 정의된 옵션과 타겟]  (0) 2012.10.18
[모듈 만들어 올리기]  (0) 2012.10.16
[error가 있는지 확인 출력]  (0) 2012.10.15
[디스크 공간 할당 방법]  (0) 2012.10.14
Posted by cyj4369
,

1. Raw NAND(PureNAND) : Original NAND 메모리를 부를때 이렇게 부릅니다. 어떠한 부가적인 처리를 추가한 NAND가 아닌 순수한 NAND 메모리 자체입니다. 보통 TSOP Package에 담겨져 출하가 되고 있으며, 경우에 따라 BGA Package에 담겨 팔리기도 합니다. NAND의 진화에 따라 Small Block NAND(SB) 및 Large Block NAND(LB)라고도 부르며, Cell에 대한 저장 방식에따라 Single level Cell (SLC) 및 Multi Level Cell(MLC) NAND 라고도 부릅니다. 보통 우리가 지칭하는 NAND라고 보시면 됩니다.

 

2. OneNAND : 삼성 반도체에서 출하한 응용 메모리 입니다. SLC의 RawNAND를 기반으로 응용 회로를 가미하여 만든 메모리로 몸통은 NAND이지만 외부와의 통신은 NOR로 하는 제품입니다. 이전에 설명한 PSRAM과 마찬가지로 몸통은 NOR와 다르나 마치 NOR처럼 작동하는 제품으로 보시면 됩니다.외부 I/F가 NOR이기 때문에 Data와 Address가 따로 분리되어 있습니다.(일반 NAND는 MUX 되어 있음). 특히 Read시에는 동기 Clock에 맞추어 Burst Read를 하기 때문에 상당히 좋은 성능이 나옵니다. Write시에는 NAND의 물리적 한계 때문에 빠른 속도를 구가하기 어렵습니다만, NAND 전용 Controller를 내장 Raw NAND 대비 빠른 성능을 보여 줍니다.사실 Fusion Memory의 핵심은 이러한 NAND 전용 Controller에 달려 있습니다. Controller가 하는 주된일은 FTL(Flash Translation Layer) 작업 + ECC 으로, NAND를 원할히 사용할 수 있도록 도와주는 일을 합니다. FTL에는 Wear leveling,Bad Block Management,Garbage Collection,physical/logical Address mapping등의 기능이 포함되어 있습니다. 이부분에 대한 설명은 NAND의 동작 강좌에서 진행하도록 하겠습니다.

 

 

3. LBA NAND - TOSHIBA에서 출시한 Fusion Memory입니다. 이 메모리는 점점 복잡해 지는 MLC NAND의 사용을 쉽게해줄 목적으로 개발 되었습니다. 최신 공정의 MLC NAND의 경우 아주 복잡한 FTL 및 ECC를 요하게 됩니다. 그러나 일반 USER의 Application Chip 및 CPU는 MLC NAND의 최신 공정을 따라가지 못합니다. 이러한 문제를 해결하기 위해 나온 메모리가 LBA NAND입니다. 기존의 NAND I/F는 유지하면서 FTL 및 ECC를 메모리 내부에서 전부 해결하기 때문에 USER는 복잡한 FTL + ECC를 고려하지 않고도 편안히 최신 공정의 MLC NAND를 사용할 수 있습니다. 구조는 위의 OneNAND와 유사하나 I/F가 NAND라고 생각하시면 됩니다.

 

4. BA NAND - Micron에서 출시한 Fusion Memory 입니다. LBA NAND와 유사한 개념이며 USER가 편안히 최신 공정의 MLC NAND를 사용하도록 하는게 목적인 메모리입니다. 또한 이러한 류의 제품을 ECC Free NAND라고도 부릅니다.

 

5. eMMC - eMMC는 JEDEC에서 표준으로 정한 휴대용 카드 I/F 규약입니다. 휴대용 카드가 아닌 내장형으로 만들어서 e(embeded)를 MMC 앞에 붙여두었습니다. 대부분의 메모리 업체에서 생산 중이며 삼성의 경우 MoviNAND라고도 부릅니다. eMMC는 8bit 시리얼 통신을 하므로 성능이 뛰어나며 차후 Boot기능까지 추가할 예정으로 기존 NAND 메모리 사용영역을 대체할 강력한 Fusion Memory입니다. 현재 32GB까지 용량이 라인업되어 있으며 eMMC Version은 4.4가 준비되고 있습니다. 이역시 Raw NAND를 응용한 메모리입니다. Datasheet는 JEDEC에서 검색하시면 얻을실 수 있습니다.

 

6. eSD  - eSD는 SD Card I/F를 가진 메모리이며, 휴대용 카드가 아닌 내장형으로 만들어서 e(embeded)를 SD 앞에 붙여두었습니다. eMMC와 매우 유사하나 SD Forum에서 운영하는 규약이기때문에 SD Forum에 가입되어 있지 않으면 로얄티를 지불해야 합니다. 대표적인 제품으로는 TOSHIBA의 GB-NAND와 SANDISK의 INAND가 있습니다. 기존의 SD Card를 많이 사용하던 제품에 수정 없이 바로 적용이 가능하다는 장점이 있습니다. 현재 32GB까지 용량이 라인업 되어 있습니다.

 

7. Flex- OneNAND - 삼성 반도체의 Fusion Memory입니다. 기존 OneNAND와 동일한 구성을 가지고 있으나 가장큰 차이점은 내부의 RawNAND가 MLC라는 점입니다. 또한 신뢰성이 필요한 동작을 보장하기위해 RawNAND의 일부를 SLC로 설정, 신뢰성 보장을 하는 기능이 내장되어 있습니다.기존 OneNAND가 SLC 전용으로 사용되어 용량이 작은 반면, MLC를 응용하는 Flex-OneNAND의 경우 대용량을 지원하는 장점이 있습니다.

 

 

8. ONFI(Open NAND Flash Interface) 규약 - Samsung,Toshiba를 제외한 NAND 업체들이 만든 규약으로 Fusion NAND라고 보기는 좀 어렵습니다만, 기존의 NAND I/F가 아닌 SDR/DDR I/F을 사용하는 고속의 NAND 메모리입니다. 성능도 좋고 Open 규약이라 아주 좋은 메모리 입니다만, 위에서 언급했듯이 시장 1,2위가 참가를 안하고 있는것이 가장 큰 문제점 입니다. 즉 확산이 거의 안되고 있는 상황이죠. 규약 및 성능 제품에 관한 안내는 아래 사이트에서 확인 할 수 있습니다.

http://onfi.org

'Embedded Lab > FLASH MEMORY' 카테고리의 다른 글

[FTL 기술흐름]  (0) 2013.06.28
[SSD에서 FTL 관리 기법 - BPLRU]  (0) 2012.09.09
[SSD 개론]  (0) 2012.09.06
Posted by cyj4369
,

예제: hello.c 모듈


1) hello.c C 소스 코드를 만들자.(Makefile로 컴파일 하기 위해서는 디렉토리의 경로에 한글이나 공백이 없어야 한다.)


$ mkdir demo; cd demo

$ vi hello.c


2) 다음의 라인을 추가하자.


#include <linux/init.h>

#include <linux/module.h>

#include <linux/kernel.h>


static int __init hello_start(void)

{

printk(KERN_INFO "Loading hello module...\n");

printk(KERN_INFO "Hello world\n");

return 0;

}


static void __exit hello_end(void)

{

printk(KERN_INFO "Goodbye Mr.\n");

}


module_init(hello_start);

module_exit(hello_end);


3) 파일을 저장하고, 새로운 Makefile을 다음과 같이 만들자.(hello.c와 Makefile은 같은 디렉토리에 있어야 한다.)


$ vi Makefile


다음 라인들을 추가하자.


obj-m = hello.o

KVERSION = $(shell uname -r)

all:

     make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules

clean:

     make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean


     부분은 탭으로 띄워야 한다

4) 저장하고 파일을 닫자.


5) hello.c모듈을 컴파일하자.


$ make


6) 루트 계정으로 전환하고 모듈을 로드하자.


$ sudo insmod hello.ko


7) 로드된 모듈을 확인하자.


$ lsmod | less


8) /var/log/message 파일에서 메세지를 확인하자.


9) 모듈을 언로드하자.


$ rmmod hello


10) 리눅스 시스템이 부팅할때 모듈을 로드할 수 있도록, /etc/modules 파일을 수정하자.

이파일은 부팅시 로드할 커널 모듈의 이름을 가지고 있다. 먼저 해당 모듈을 /lib/modules/$(uname -r)/kernel/drivers 에 복사하고, 다음의 단계들을 밝아 나가자.


(a) hello모듈의 디렉토리를 만들자


$ mkdir -p /lib/modules/$(uname -r)/kernel/drivers/hello


(b) 모듈을 복사하자.


$ cp hello.ko /lib/modules/$(uname -r)/kernel/drivers/hello/


(c) /etc/modules파일을 편집하자.


$ vi /etc/modules


(d) 다음 라인을 추가하자.


hello


(e) 변경된 사항을 살펴보기 위해서 재부팅하자. 그리고 lsmod나 dmesg 를 사용해서 로드된 모듈을 확인하자.


$ cat /proc/modules


OR


$ lsmod | less







-c: 커널 모듈은 독립적으로 실행 가능한 파일이 아니며, insmod를 사용하여 실행 시간 중에 커널에 링크되는 오브젝트 파일 이다. 결론적으로 모듈은 -c옵션을 주고 컴파일 해야 한다. 


-O2: 커널은 인라인 함수를 주로 사용하기 때문에 모듈은 이 옵션 플래그를 사용해야 한다. 이 옵션을 사용하지 않은 경우 어떤 어셈블러 매크로는 함수 호출 시 정상적으로 작동하지 않을 것이다. insmod는 커널에서 원하는 함수를 찾지 못하고 결국 모듈의 적재는 실패할 것이다. 


-W -Wall: 프로그램에서의 실수는 당신의 시스템을 다운 시킬 수도 있다. 컴파일러 경고 기능은 항상 켜둬라, 이것은 모듈 컴파일 뿐 아니라 당신의 모든 컴파일 행위에 적용된다. 


-isystem /lib/modules/uname -r/build/include: 컴파일 대상이 되는 커널의 헤더를 사용해야만 한다. 기본적인 /usr/include/linux를 사용하는 것은 작동하지 않을 것이다. 


-DKERNEL:이 심볼을 정의 하는 것은 헤더 파일에 이 코드가 유저 프로세스로 동작하지 않고 커널 모드에서 작동한다는 사실을 알린다. 


-DMODULE: 이 심볼은 헤더 파일에 커널 모듈을 위한 올바른 정의를 하게 한다. 








2.6 커널에서는 linux/init.h 헤더파일이 추가되었습니다. 그리고 init_module()과 cleanup_module() 이라는함수 이름 규약을 더이상 따르지 않아도 됩니다. 초기화 함수와 종료 함수는 자신이 원하는 이름으로 작성하면 되고, module_init()과 module_exit()매크로에서 초기화 함수와 종료 함수의 이름만 지정해주면 됩니다. 물론 2.4 커널의 init_module(), cleanup_module()을 사용해도 되지만, 현재 커널 해커들은 이들 함수를 전혀 사용하고 있지 않습니다. 2.4.20 이후 버전의 커널에서는 위와 같은 2.6 형식의 코드를 사용하고, gcc를 사용해서 모듈로 빌드할 수 있습니다. 2.4.20 이후 버전과 2.6 커널의 모듈은 동일한 코드를 사용할 수 있으며, 빌드 과정만 다릅니다.


2.6 커널부터는 커널 빌드에 대해서 kbuild 시스템을 사용합니다. 따라서 모듈을 빌드하기 위해서 gcc를 사용할 수 없고, Makefile을 정의하고, kbuild 시스템으로 모듈을 빌드해야 합니다.

Posted by cyj4369
,

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main(){
    printf("%s", strerror(errno));
    return 0;
}

Posted by cyj4369
,

지난 시간까지 파일과 디렉터리에 관한 전반적인 내용을 다뤘다. 
파일과 파일시스템, 파일에 대한 정보를 가지고 있는 파일 디스크립터, 파일의 구조, 디렉터리의 구조에 대해서 살펴봤는데 이번시간에는 디스크 공간 할당 방법에 대해서 살펴보자.

디스크 공간 할당이란건 뭐냐면 파일을 효율적으로 저장하고 사용하기 위해 파일을 기억공간에 어떻게 할당할 것인가를 결정하는 방법이야. 
파일을 디스크 공간에 할당하는 방법에는 연속 할당 방법과 불연속 할당 방법이 있어. (불연속 할당 방법에는 섹터 단위 할당과 블록 단위 할당이 있는데 지금부터 하나씩 설명해줄께 ㅋㅋ)


연속 할당(Contiguous Allocation)은 파일을 디스크의 연속된 기억공간에 할당하는 방법으로, 생성되는 파일 크기만큼의 공간이 있어야 해.
항상 비슷하지 않아?? 저장장소에 저장시키는 방법 ㅋㅋ 연속, 불연속 ㅋㅋ 연속 할당의 특징은 아래와 같아.

- 논리적으로 연속된 레코드들이 물리적으로 인접한 공간에 저장되기 때문에 접근 시간이 빠르다.
- 디렉터리는 파일의 시작 주소와 길이에 대한 정보만 가지고 있으므로 디렉터리가 단순하고, 관리 및 구현이 용이하다.
- 파일 크기에 알맞은 연속 공간이 없을 경우 파일이 생성되지 않는다.
- 파일의 생성과 삭제가 반복되면서 단편화가 발생한다.
- 단편화를 줄이기 위해 재배치에 의한 주기적인 압축(Compaction)이 필요하다.
- 파일의 크기가 시간에 따라 변경될 경우 구현하기가 어렵다.

                                                  <연속 할당 Contiguous Allocation>

불연속할당(Non-Contiguous Allocation)은 파일의 크기가 변경될 경우 구현이 어려운 연속 할당의 단점을 보완하기 위한 것이야. 이것은 디스크 공간을 일정 단위로 나누어 할당하는 기법이지.ㅋㅋ

불연속 할당에는 섹터 단위 할당과 블록 단위 할당 방법이 있어.
 
1) 섹터 단위 할당

- 하나의 파일이 디스크의 섹터 단위로 분산되어 할당되는 방법으로, 하나의 파일에 속하는 섹터들이 연결 리스트(Linked List)로 구성되어 있다. 
- 하나의 파일에 속하는 각각의 섹터는 연결을 위해 다음 내용이 있는 곳의 포인터를 가지고 있다.
- 디렉터리는 파일의 시작과 마지막 주소에 대한 정보만 가지고 있다.
- 섹터 단위로 저장되므로 디스크의 단편화가 발생되지 않고, 디스크 압축이 불필요하다.
- 파일 생성 시 파일 크기를 알 필요가 없으며, 파일 크기만큼의 연속된 공간이 없어도 저장이 가능하다.
- 레코드를 검색할 경우 파일이 속한 레코드를 순차적으로 검색해야 하므로 탐색 시간이 오래 걸리고, 직접 접근이 불가능하다. ( 이건 단점)
- 각 섹터의 포인터가 차지하는 공간만큼 실제 데이터가 저장될 공간이 감소한다.


2) 블록 단위 할당

블록 단위 할당은 하나의 파일이 연속된 여러 개의 섹터를 묶은 블록 단위로 할당되는 방법이며 블록 체인 할당, 색인 블록 체인 할당, 블록 지향 파일 사상 기법이 있다.

가) 블록 체인 기법
 
- 블록 체인 기법은 섹터 단위 할당 기법과 비슷하나 할당 단위를 블록 단위로 구성하는 기법이다.
- 하나의 블록은 여러 개의 섹터로 구성되어 있다.
- 디렉터리는 파일의 첫 번째 블록을 가리키는 포인터를 가지고 있다.
- 하나의 블록은 데이터와 다음 블록을 가리키는 포인터로 구성되어 있다.
- 삽입과 삭제 시 포인터만 수정하면 되므로 삽입, 삭제가 간단하다.
- 순차적으로 탐색해야 되므로 속도가 느리다.(단점)

나) 색인(인덱스) 블록 체인 기법

- 색인 블록 체인 기법은 파일마다 색인 블록을 두고, 파일이 할당된 블록의 모든 포인터를 이 색인 블록에 모아 둠으로써 직접 접근을 가능하게 한 방법이다.
- 색인 블록 하나로 파일을 전부 나타낼 수 없는 경우 여러 개의 연속된 색인 블록을 서로 링크하여 사용할 수 있다.
- 디렉터리는 파일의 색인 블록에 대한 포인터를 가지고 있다.
- 색인 블록의 포인터를 사용하여 직접 접근이 가능하며, 탐색 시간이 빠르다.
- 삽입 시 색인 블록을 재구성해야 하고, 색인 블록이 차지하는 만큼의 기억장치 낭비가 발생한다.(단점)

 
다) 블록 지향 파일 사상 기법

- 블록 지향 파일 사상 기법은 포인터 대신 파일 할당 테이블(FAT, File Allocation Table)에 있는 블록 번호를 사용하는 기법이다.
- 파일 할당 테이블에는 각 블록에 해당하는 항목이 있고, 각 항목은 블록 번호에 의해 색인된다. 
- 블록 번호에 의해 색인된 테이블의 각 항복은 다음 블록의 블록 번호를 가진다. 
- 디스크 구조의 특성상 블록 번호는 실제 기억공간의 주소로 쉽게 변환할 수 있다.
- 데이터의 삽입, 삭제가 용이하다.
- 디렉터리는 파일 할당 테이블의 시작 위치를 가지고 있다.



출처

http://wingsofgod.tistory.com/190

Posted by cyj4369
,