BPLRU
 

\"사용자
 연속적인 읽기와 쓰기 요구에 대해 SSD는 하드디스크와 비슷하거나 더 좋은 performance를 가지고 있지만 random writes에서는 더 안좋은 performance가 나타난다. 이런 SSD의 poor performance는 데스크탑이나 서버 시스템에 크게 영향을 미칠수 있다. BPLRU는 flash storage의 이런 random write performance를 향상시키기 위한 새로운 write buffer management sheme이다. 이는 세가지 핵심기술(Block-level LRU, Page padding, and LRU compensation)을 사용한다.
1. Block-level LRU

  Block-level LRU는 FTL에서 merge operations의 수를 최소화 하기위해 erasable block의 크기를 고려하여 LRU list를 경신한다.
사용자 삽입 이미지
  8개의 sector는 the write buffer에 있다. 그리고 각각의 블록은 4개의 sector를 포함한다. sector 15가 다시 기록될 때, 전체 블록은 LRU list의 head로 이동한다. sector 12는 최근에 access되지 않았더라도 LRU list의 앞에 있다. free space가 필요할때, 최근에 가적 적게 사용된 블록이 victim block으로 선택된다. 그리고 victim block내의 모든 sector는 순간 cache로부터 flushed 된다. block 1은 victim block로 선택되고 sectors 5와 6은 flushed 된다.
2. Page padding

  Page padding은 the buffer flushing cost를 줄이기 위해 fragmented write patterns을 sequential write patterns로 바꿔준다.
  BPLRU는 victim block에 없는 몇 개의 page를 읽는다.그리고 순차적으로 블록 범위내의 모든 sector를 기록한다. Page padding은 불필요한 reads와 writes를 하는 것처럼 보일 수 있지만 그것은 비싼 full merge를 효율적인 switch merge로 바꿀 수 있기 때문에 더 효과적이다.
사용자 삽입 이미지
  The victim block은 오직 두 개의 sectors(12 and 15)를 가지고 있다. 그리고 BPLRU는 page padding을 위해 sectors 13과 14를 읽는다. 그러면, sectors 12-16은 순차적으로 기록된다. Log-block FTL에서, log block은 the writes 할당된다. 그리고, the log block은 현재의 데이터 블록을 복구시킨다. 로그블록은 블록내의 모든 sector에 순차적으로 기록되기 때문이다. 즉, switch merge가 발생한다.
3. LRU compensation

  LRU compensation은 random writes를 더 효과적으로 하여 RAM을 사용하기 위해 the LRU list를 조절한다.
사용자 삽입 이미지
  BPLRU block 2가 전체적으로 순차적으로 기록되는 것을 인지하고, 그것을 LRU list의 끝으로 이동시킨다. 나중에 더 많은 공간이 필요해지면 그 블록은 victim block으로 선택되고 flushed 될 것이다.

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

[FTL 기술흐름]  (0) 2013.06.28
[NAND 플래시의 종류]  (0) 2012.10.17
[SSD 개론]  (0) 2012.09.06
Posted by cyj4369
,

SSD 기술소개
  ㆍ Solid State Drive (SSD)이란 하드디스크처럼 사용할 수 있도록 된 저장장치이다. 팍스디스크는 국내 최초로 SSD 를 개발한 이력을 보유하고 있다.
  ㆍ NAND Flash SSD란 본질적으로 플래시 메모리칩의 배열로, HDD와 호환성을 가지도록 에뮬레이션을 하는 컨트롤러를 가지고 있다.
  ㆍ 팍스디스크의 핵심 기술은 자체적으로 SSD 컨트롤러를 보유하고 있으며, SSD 시스템을 개발-생산-계측 시스템을 모두 보유하고 있다. 
       특히, 단일컨트롤러로 세계 최대용량을 지원하는 핵심 기술과 클라우드 컴퓨팅용 서버등을 위한 고객사등에 적용시키고 있다.  

■ Flash Memory의 물리적 특징
  ㆍ 전원이 끊겨도 저장된 내용이 삭제되지 않는 메모리 (c.f. ROM)
  ㆍ 읽기/쓰기가 자유로운 메모리 (c.f. DRAM/SRAM)
  ㆍ SSD (Solid state Drive) : 회전운동을 하는 하드 디스크와 달리 고정된 반도체 메모리 방식으로 무소음 작동
  ㆍ 모터 회전에 따라 자기 데이터를 읽는 하드디스크보다 몇배이상 빠르게 작동
  ㆍ 작동온도 범위도 플래시 메모리는 더 저온과 고온에서 작동이 가능
■ Flash Memory의 기술적 특징
  ㆍ 데이터를 쓰기전에 반드시 지워야 한다.
  ㆍ read/write의 단위와 지우기의 단위가 다르다 - Read/Write: page (보통 2-8kB) Erase: block (128 page)
  ㆍ read, write, erase에 소요되는 시간이 서로 다르다. - Read(0.025ms)〈 Write(0.2ms)〈 Erase(1.5ms)
  ㆍ 데이터의 신뢰성이 다른 메모리에 비해 극히 좋지 않기 때문에 오류 정정기술(ECC)이 없으면 사실상 사용이 불가능하다. 
  ㆍ 따라서 메모리셀은 지우기를 할때마다 닳아서 손상되며 수명이 제한되어 있다.
■ NOR vs. NAND 구조 비교
* NOR Flash
  ㆍ Random, direct access interface
  ㆍ Random 읽기 속도가 빠르다.
  ㆍ 늦은 지우기와 쓰기이지만, 데이터 신뢰성이 높다. (ECC 불요)
  ㆍ 프로그램 저장에 주로 사용된다
* NAND Flash
  ㆍ Block단위로 I/O 접근을 한다
  ㆍ 고밀도 저장, 저렴한 가격
  ㆍ 지우기와 쓰기가 뛰어나지만, 데이터 신뢰성이 낮다. (ECC필요)
  ㆍ 주로 (연속된) 데이터 자정에 사용된다.
■ SLC vs. MLC
  ㆍ SLC 와 MLC NAND Flash 칩은 각각 하나의 비트와 두개의 비트를 메모리셀마다 가지고 있다.

  ㆍ SLC가 MLC와 비교해 신뢰성이 높아 10만회까지 읽고/쓰기가 가능하지만 단가가 비싸다.
  ㆍ MLC는 SLC에 비해 신뢰성이 떨어져 수천회까지만 읽고/쓰기가 가능하지만 단가가 저렴하여 양산제품에 많이 사용되고 있다.
  ㆍ 대용량제품에서는 MLC를 중심으로 생산되며,산업용, 방산용 제품에서는 SLC 중심으로 생산된다.
■ NAND Flash 물리적 구조
  ㆍ 읽기는 대단히 빠르지만, 쓰기는 상대적으로 느려 SSD 컨트롤러가 버퍼를 활용하는등 모아쓰기 기법을 사용하게 된다.
  ㆍ 지우는 시간이 오래 걸려, 컨트롤러가 전체 성능에 영향을 주지 않도록 한꺼번에 지우는 작업을 백그라운드로 수행하게 된다.

■ NAND Flash Memory의 논리적 구조
  ㆍ NAND Flash는 Block과 그 하부구조인 Page 단위로만 접근이 가능하며, 단 하나의 비트만을 쓰더라도 1page 전부를 사용하게 된다.

■ SSD Architecture
Controller는 일종의 SoC(system on chip)로 Host(컴퓨터)와 독립적으로 플래시메모리를 컨트롤 하여 
안정적인 드라이브 성능을 제공하게 된다. 팍스디스크는 SSD 에 필요한 모든 IP 를 자체 보유하고 있어 맞춤형으로 설계가 가능하다.
특히, SATA 6Gbps, Multi-Port 형 초고속 LPDDR Controller 를 자체 기술로 보유하고 있고, 세계 최소형 28bit BCH-ECC 기술을 사용하고 있다. . 

■ FTL(Flash Translation Layer)
  ㆍ 플래시 메모리의 동작 특성을 숨김.
  ㆍ 일반적인 파일 시스템의 인터페이스 제공
  ㆍ 플래시 메모리를 마치 디스크 드라이브처럼 보이도록 컨트롤러에 내장된 소프트웨어

FTL은 file system의 논리적 주소를 Flash memory의 실제 물리적 주소로 상호 변환시켜줄뿐 아니라, 
Flash memory특성상 쓰기동작이 지연되는 경우, 이를 숨기거나 보완하는등 핵심적인 역할을 하는 소프트웨어이다.
■ NAND Flash SSD구조

SSD에서는 Flash memory의 수명연장이나 신뢰성 제고를 위해 다양한 기술적 요소가 필요하다.

  ㆍ Garbage Collection은 마치 PC의 디스크조각 모음과 유사한 기능을 구현하며,
  ㆍ ECC는 데이터와 별도의 Spare Array 영역에 저장해 둔 코드를 활용해서 자동으로 복구하도록 도와주며,
  ㆍ Bad block관리는 HDD가 low level포맷을 통해 사용가능영역을 확정하는것과 비슷한 역할을 백그라운드로 수행하며,
  ㆍ Wear leveling은 일정영역에 계속 쓰기를 반복하면 Flash memory의 셀이 손상되므로
  ㆍ 이를 전영역에 고르게 쓰도록 하는 쓰기균등화 기능을 자동으로 수행한다.

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

[FTL 기술흐름]  (0) 2013.06.28
[NAND 플래시의 종류]  (0) 2012.10.17
[SSD에서 FTL 관리 기법 - BPLRU]  (0) 2012.09.09
Posted by cyj4369
,





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

[JTAG & UART]  (0) 2012.09.13
[Flash Memory(NOR / NAND)]  (0) 2012.09.12
[vim에서 여러 줄에 주석 달고 해제하기]  (0) 2012.08.30
[bashrc에 shell 칼라 설정]  (0) 2012.08.30
[nask NASM 어셈블러 문법]  (0) 2012.06.07
Posted by cyj4369
,

문제:

초기 등록 할 때 사용자 계정을 cho 로 설정을 했다. 

그러나 사용하다가 내 걔정명(홈 디렉토리)을 xxsoo 로 바꾸고 싶에 졌다.


해결:

1. root를 활성화 시킨다.

 root  패스워드 설정은 응용프로그램 > 유틸리티 > 터미널을 실행한후

 

$ dsenableroot


2. root로 로그인 할 수 있게 설정한다.

시스템 환경설정 > 사용자 및 그룹 > 로그인 옵션 

로그인 윈도우를 다음과 같이 표시: 를 [이름과 암호] 로 선택한다.


3. 로그아웃 후 root 로 로그인 한다.

사과를 눌러 로그아웃후 root로 로그인


4. 사용자 폴더 이름 변경

4-1. root 로 로그인 하면 설정이 아무 것도 안되 있는 상태이다.

파인더 클릭 > 환경설정(상단 메뉴) > 일반 > 하드디스크를 선택 한다.

그럼 바탕화면에 하드디스크가 생긴다.

4-2.  하드디스크 클릭후 사용자 > cho (기존 계정명) 을 xxsoo (원하는 계정명)

으로 폴더명을 변경한다.

             4-3.  xxsoo 계정을 추가 한다.

시스템 환경설정> 사용자 및 그룹 에서 기존 계정 오른쪽클릭.

   고급설정에서 계정 이름과 홈 디렉토리 경로를 바꾼다.

     4-4. 사과를 눌러 로그아웃 후 관리자로 로그인한다.

   

Posted by cyj4369
,

명령 모드에서
V를 누르게 되면 하단에 Visual이라는 메세지가 출력됨 그 상태에서 주석 처리할 줄을 선택한 후에

:norm i#
-> # : 추가할 문자 


주석 지울 시에는 V를 눌러 Visual로 전환후 주석 제거할 줄 선택 후 
:norm 2x
-> 2는 선택된 줄의 왼쪽으로 부터 몇번째 문자 
-> x는 삭제를 의미


1v, 2v 이런식으로 v명령어 앞에 숫자를 붙여서 사용할수도 있으며 
1v 는 20줄 선택 2v는 40줄 선택 이런식으로 20줄씩 증가

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

[Flash Memory(NOR / NAND)]  (0) 2012.09.12
[fork에 대한 그림 설명]  (0) 2012.09.05
[bashrc에 shell 칼라 설정]  (0) 2012.08.30
[nask NASM 어셈블러 문법]  (0) 2012.06.07
[NASM과 MASM]  (0) 2012.06.02
Posted by cyj4369
,

*내가 한 설정!

(줄바꿈은 가독성을 위해 한것, 실제로는 ~/.bashrc에 한 줄에 입력해야함_55번째줄쯤else아래)


[

\[\033[34m\]

\D{%Y-%m-%d %H:%M:%S}

\[\033[00m\]

]

\[\033[32m\]

\u

\[\033[00m\]

@

\h

\[\033[31m\]

:

\[\033[00m\]

\w

\[\033[31m\]

\$

\[\033[00m\]


[결과]

[2012-08-30 18:21:27]cyj4369@ubuntu:~/Desktop$


====================================================================

[글 1]

프롬프트 변경이 가능하니 이제 컬러를 입혀 보도록 하겠습니다.
색깔은 안시 컬러를 이용하는데 형식은 다음과 같습니다.


    ₩[₩e[속성m₩] 또는 ₩[₩e[색코드m₩]


속성은 볼드체, 역상, 점멸 등을 나타내며 색코드는 글자의 색깔을 결정합니다.
속성과 색코드는 각각 하나만 사용해도 되고 같이 사용할 수도 있습니다.

예를 들어 붉은색 프롬프트를 사용하고 싶다면 색코드 31을 이용하면 됩니다.
(편의상 속성은 사용하지 않습니다.)

    $ PS1="₩[₩e[31m₩]붉은색 프롬프트: "
    붉은색 프롬프트:
    붉은색 프롬프트: ls

일단 붉은색으로 프롬프트가 바뀌면 이후로 타이핑되는 글자 또한 모두 붉은색으로 표현되므로 보기 좋지 않습니다.
프롬프트 색을 지정하더라도 타이핑되는 글자는 기본값으로 복구시켜 주는 것이 좋습니다.

기본 색코드 0 을 마지막에 추가하여 원상 복귀시켜 줍니다. 

    $ PS1="₩[₩e[31m₩]붉은색 프롬프트: ₩[₩e[0m₩]"
    붉은색 프롬프트: ls


색깔별로 여러개를 혼합해서 사용하는 것도 가능합니다.

    $ PS1="₩[₩e[31m₩]우₩[₩35m₩]분₩[₩e[33m₩]투₩[₩e[34m₩]짱₩[₩e[0m₩]:"
    :
    :
    :ls


여러가지 색을 이용한 프롬프트도 가능한데 가독성이 좋지 않으므로 한 두가지 색상만 사용하는 것이 좋습니다.
속성은 기본값과 볼드체, 역상을 주로 사용하는 데 터미널에 따라 속성 적용에 제한이 있으므로 자주 사용하지는 않습니다. 


다음은 속성과 색코드 표입니다.


    속성

    0 = 기본값--- 1 = 볼드체--- 4 = 밑줄--- 5 = 점멸--- 7 = 역상


    색코드

    31 = 빨강--- 32 = 초록---33 = 오렌지 
    34 = 파랑--- 35 = 자주---36 = 청록 ---37 = 회색
    90 = 진회색 ---91 = 연빨강--- 92 = 연두--- 93 = 노랑
    94 = 연한 파랑
    95 = 연한 자주
    96 = 하늘색

    40 = 검정 배경--- 41 = 빨강 배경
    42 = 초록 배경--- 43 = 오렌지 배경
    44 = 파랑 배경--- 45 = 자주 배경
    46 = 청록 배경--- 47 = 회색 배경
    100 = 진회색 배경--- 101 = 연한 빨강 배경
    102 = 연두 배경--- 103 = 노랑 배경
    104 = 연한 파랑 배경--- 105 = 연한 자주 배경
    106 = 하늘색 배경


나만의 멋진 프롬프트를 만들어 보세요 !

====================================================================

[글 2]




* 목차
1. ANSI color
1.1 ANSI escape code
1.2 ANSI color 예제
2. Linux prompt
2.1 프롬프트 변수
2.2 프롬프트에 색상 넣기



1. ANSI color
ANSI 컬러는 ANSI escape code의 기능중 하나이다. 원래 ANSI escape code는 터미널의 텍스트 포맷을 제어하기 위해서 만들어진 코드이며 현재 ISO/IEC-6429 표준으로 제정되어있다. 따라서 대부분의 UNIX, Linux, DOS, Windows 등은 터미널에서 ANSI escape code를 지원한다.(일부 기능은 지원하지 않을 수도 있다.)

여기서는 리눅스(or 유닉스 계열)의 사용자를 기준으로 설명할 것이며 DOS/Windows 사용자들은 어차피 이 기능을 잘 안쓰므로 알아봐야 별 의미가 없을수도 있다.(즉 윈도우 사용자들에게는 별 도움이 안되는 글이다.)

1.1 ANSI escape code
ANSI escape code를 사용하기 위해서는 ANSI escape code를 지원하는 터미널이 필요하다.
그러나 안심하라. 현재 대부분의 리눅스/유닉스의 터미널은 ANSI escape code를 지원한다.
(지원하지 않는 기능을 굳이 설명할 이유도 없는것 아닌가?)

이제 터미널을 하나 열고 echo -e "\e[33m"를 타이핑 해보자.

[sunyzero@dev1 ~]$ echo -e "\e[33m"
$[sunyzero@dev1 ~]$
echo 문이 실행된 후에는 프롬프트 색상이 모두 노란색으로 바뀌어 있음을 알 수 있다. 이 후 타이핑하는 모든 글자는 다 노랗게 보일 것이다. 원상복귀를 위해 echo -e "\e[m"명령을 타이핑 해두자.

앞서 예제의 "\e[33m"과 같은 형태를 ANSI escape sequence라고 부르는데, echo문에서 이를 출력하여 실행하려면 ANSI escape code를 인식하는 옵션인 -e를 같이 넣어줘야 한다. 넣지 않으면 그냥 문자열로 인식해서 단순출력해버린다.

또한 ANSI escape sequence에서 시작문자인"\e["는 CSI(Control Sequence Introducer)라고 부르며 뒤의 33m, m 같은 것이 ANSI escape sequence의 코드 내용 부분이 되겠다.

CSI의 \e는 ASCII코드의 ESC키를 의미하므로 ESC의 ASCII값인 8진수 033(=decimal 27)을 사용하여 \033으로 표기할 수도 있다. 따라서 위의 "\e[33m"는 "\033[33m"으로 써도 된다.
ANSI Escape sequence = CSI + n [;+ ...] + letter
CSI = \e[ = \033[
CSI 다음에 나오는 n은 숫자이며 복수개가 나올때는 세미콜론(;)으로 구분한다. 마지막의 영문자 1개는 ANSI escape sequence의 명령(command)에 해당한다. 예를 들어 T는 스크롤 다운, m은 색상 변경등의 기능을 가진다. 색상 변경은 SGR(Select Graphic Rendition)이라고 부른다.

여기서는 ANSI Escape code 중 색상만 다루므로 m 명령만 다루도록 할 것이다. 그 외 명령어는 하단의 [1]의 링크를 참고하라.



1.2 ANSI color 예제
ANSI의 색상에서 사용 가능한 색상 밑 기능 테이블은 다음과 같다. [1]
Intensity012345679
NormalBlackRedGreenYellowBlueMagentaCyanWhitereset
BrightBlackRedGreenYellowBlueMagentaCyanWhite
색상은 0부터 7까지 사용가능한데, 그냥 사용하는게 아니라 뒤의 30, 40, 90, 100을 더해서 사용한다. 즉 normal yellow는 33이 된다. 40을 더해서 43을 만들면 Bright 옵션이 켜지게 된다. 그러면 이제 30~, 40~ 따위의 코드를 정리해보자.
CodeEffectNote
0Reset / Normalall attributes off
1Intensity: Bold
2Intensity: Faintnot widely supported
3Italic: onnot widely supported. Sometimes treated as inverse.
4Underline: Single
5Blink: Slowless than 150 per minute
6Blink: RapidMS-DOS ANSI.SYS; 150 per minute or more
7Image: Negativeinverse or reverse; swap foreground and background
8Concealnot widely supported
21Underline: Doublenot widely supported
22Intensity: Normalnot bold and not faint
24Underline: None
25Blink: off
27Image: Positive
28Revealconceal off
30–39Set foreground color, normal intensity3x, where x is from the color table above
40–49Set background color, normal intensity4x, where x is from the color table above
90–99Set foreground color, high intensityaixterm
100–109set background color, high intensityaixterm
(위의 Table은 하단 레퍼런스에 있는 위키[1]에서 인용했다.)

이제부터 예제를 보면서 실습하자. 가장 간단한 Hello world부터 시작해보자.
[sunyzero@dev1 ~]$ echo -e "\e[31mHello World\e[m"
Hello World
항상 마지막에 나오는 \e[m은 숫자가 생략되었으므로 \e[0m과 같다. 즉 Reset이다. 이렇게 하지 않으면 변경된 색상이 계속 적용되어 프롬프트 색이 이상하게 나오기 때문이다. 앞으로 ANSI 색상을 쓸 때는 마지막에 Reset을 넣는 것을 잊지말자. 그 외의 것은 설명할 것이 없으니 이번에는 여러 속성을 넣어본 것을 실습해보자.
[sunyzero@dev1 ~]$ echo -e "\e[96mHello \e[0;4;93mWorld\e[m"
HelloWorld
96에서 십자릿수의 90번대(90-99)는 위의 표에서 "90-99 Set foreground color, high intensity"라고 나온다. 일자릿수의 6번과 조합해보면 Bright Cyan색이 된다. 두번째 ANSI escape sequence는 0;4;93이 연달아 나오므로 0은 Reset, 즉 앞에서 설정된 bright cyan색을 우선 해제하고, 4는 underline, 93에서 십자릿수의 90번대(90-99)는 high inensity색상이며 그 중 3번은 Yellow계열이므로 진노랑색이 나온다.

* 참고: high intensity 글자를 쓰기 위해서 90-99번대의 숫자를 사용하는 방법외에도 코드 1번(bold, intensity)를 넣어도 결과는 같다. 즉 93m이나 1;33m 은 같은 결과이므로 편한대로 쓰면 된다.

그렇다면 이번에는 배경색까지 지정하는 연습으로 high intensity yellow 배경에 normal green색 글씨로 Hellow world를 써보자.




2. Linux prompt
리눅스(혹은 유닉스)의 bash 쉘에서는 PS1 환경변수를 바꾸면 현재 프롬프트를 변경할 수 있다.
bash쉘 외에 ksh나 POSIX sh쉘등도 PS1 환경변수를 바꾸면 쉽게 프롬프트가 변경된다.

환경변수를 설정하는 리눅스 명령은 export나 declare -x 를 사용하면 되는데, export가 더 많이 쓰이므로 여기 예제에서는 export명령을 기준으로 설명하겠다.


2.1 프롬프트 변수
리눅스의 bash 쉘 프롬프트 기본값은 "[유저명@호스트명 현재디렉토리]$"의 형태로 되어있다.(root유저는 맨 끝의 프롬프트 문자가 #으로 나타남)
이 중에 유저명은 \u이고 호스트명은 \h, 현재 작업디렉토리는 \W의 변수로 PS1 환경변수에 쓰여진다.
따라서 기본값 PS1은 "[\u@\h \w]$ "가 된다. 그러면 어떤 변수들을 사용할 수 있는지부터 알아보자.
variablenote
\aan ASCII bell character (07)
\dthe date in "Weekday Month Date" format (e.g., "Tue May 26")
\D{format}the format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required
\ean ASCII escape character (033)
\hthe hostname up to the first ‘.’
\Hthe hostname
\jthe number of jobs currently managed by the shell
\lthe basename of the shell’s terminal device name
\nnewline
\rcarriage return
\sthe name of the shell, the basename of $0 (the portion following the final slash)
\tthe current time in 24-hour HH:MM:SS format
\Tthe current time in 12-hour HH:MM:SS format
\@the current time in 12-hour am/pm format
\Athe current time in 24-hour HH:MM format
\uthe username of the current user
\vthe version of bash (e.g., 2.00)
\Vthe release of bash, version + patch level (e.g., 2.00.0)
\wthe current working directory, with $HOME abbreviated with a tilde (uses the $PROMPT_DIRTRIM variable)
\Wthe basename of the current working directory, with $HOME abbreviated with a tilde
\!the history number of this command
\#the command number of this command
\$if the effective UID is 0, a #, otherwise a $
\nnnthe character corresponding to the octal number nnn
\\a backslash
\[begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
\]end a sequence of non-printing characters
(* 위 변수목록은 man bash의 PROMPTING 부분에서 인용함)
위의 표에서 나온 것을 사용해서 유용한 프롬프트 예를 3가지 만들어보겠다. 시각편의성을 위해서 프롬프트는 red, 명령어 부분은 blue로 표기했다.

[sunyzero@dev1 pub]$
export PS1="\u:\w $ "
sunyzero:/var/ftp/pub $ export PS1="[\u@\h] \w\n[\@ \$ "
[sunyzero@dev1] /var/ftp/pub
[02:02 PM $
export PS1="[\D{%Y-%m-%d %H:%M:%S}] [\u@\h] \w\n\$ "
[2009-11-24 14:11:52] [sunyzero@dev1] /var/ftp/pub
$
첫번째는 아주 간결한 프롬프트로서 \u와 \w로 구성했다. 두번째는 2행짜리 프롬프트로서 첫째 행에는 유저,호스트,작업디렉토리를 배치하고 둘째 행에는 시간을 배치했다. 세번째도 2행짜리 프롬프트로서 모든 정보를 첫째 행에 배치하고 둘째 행을 넓게 쓰는게 특징이다.



2.2 프롬프트에 색상 넣기
이제 앞의 프롬프트에 색상을 넣는 작업을 할 시간이다. 색상은 자신의 입맛에 넣으면 된다.
필자는 다음과 같이 넣어보았다. 중간에 너무 길어서 \로 개행하고 다음라인에 타이핑했다.(맨끝의 \는 다음행 개행을 의미하며 다음행은 >으로 시작한다.)
$ export PS1="\e[1;37m[\e[36m\D{%Y-%m-%d %H:%M:%S}\e[37m] \
>
[\e[32m\u\e[31m@\e[33m\h\e[37m] \e[34m\w\e[m\n\$ "
[2009-11-24 14:58:04] [sunyzero@atom] /var/ftp/pub
$

이제 본인이 필요한 내용을 넣어서 본인만의 PS1을 만들면 된다.

그리고 위의 PS1 설정 명령은 홈디렉토리에 있는 .bashrc 파일에 넣어두면 매번 로그인할때 자동으로 실행된다.(아래는 .bashrc의 예제이다.)
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

# User specific aliases and functions
export PS1="\e[1;37m[\e[36m\D{%Y-%m-%d %H:%M:%S}\e[37m] \
[\e[32m\u\e[31m@\e[33m\h\e[37m] \e[34m\w\e[m\n\$ "



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

[fork에 대한 그림 설명]  (0) 2012.09.05
[vim에서 여러 줄에 주석 달고 해제하기]  (0) 2012.08.30
[nask NASM 어셈블러 문법]  (0) 2012.06.07
[NASM과 MASM]  (0) 2012.06.02
[CPU스케쥴러]  (0) 2012.05.26
Posted by cyj4369
,

/FORCE 옵션을 사용하면 링커에서는 기호가 참조되어 있지만 정의되어 있지 않은 경우나 여러 번 정의되어 있는 경우에도 올바른 .exe 파일 또는 DLL을 만듭니다.

/FORCE 옵션에는 다음과 같이 선택적 인수를 사용할 수 있습니다.

  • /FORCE:MULTIPLE을 사용하면 LINK에서 기호에 대한 정의를 하나 이상 찾더라도 출력 파일을 만들 수 있습니다.

  • /FORCE:UNRESOLVED를 사용하면 LINK에서 정의되지 않은 기호를 찾더라도 출력 파일을 만들 수 있습니다. 진입점 기호가 확인되지 않으면 /FORCE:UNRESOLVED는 무시됩니다.

/FORCE에 인수를 사용하지 않으면 MULTIPLE과 UNRESOLVED를 모두 의미합니다.

이 옵션을 사용하여 만든 파일이 예상대로 실행되지 않을 수도 있습니다. 링커에서는 /FORCE 옵션이 지정된 경우 증분 링크를 수행하지 않기 때문입니다.

/clr를 사용하여 모듈을 컴파일하는 경우 /FORCE를 지정해도 이미지가 생성되지 않습니다.

Posted by cyj4369
,

주석을 제거하면 트레이아이콘이 나오고 주석을 넣으면 아무 창도 안뜨고 백그라운드에서 실행



//NOTIFYICONDATA  nid;

// nid.cbSize = sizeof(nid);

// nid.hWnd = m_hWnd; // 메인윈도우핸들

// nid.uID = IDR_MAINFRAME;  // 아이콘리소스ID

// nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // 플래그설정

// nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 아이콘로드

// CString Title = _T("초보자를위한작곡프로그램");   // 트레이위에커서가올라갔을때표시되는프로그램명

// lstrcpy(nid.szTip, Title); 

// Shell_NotifyIcon(NIM_ADD, &nid);


ModifyStyleEx (WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);


MoveWindow(-100,-100,0,0,1);



======아래는 퍼온글======


음....

프로그램 시작과 동시에 다이얼로그를 안보이게 할때면,(ShowWindow(SW_HIDE);를 쓰던지 우주 넘어로 날려버리던지(MoveWindow(0,0,0,0,1);)  그 와 동시에 작업표시줄에서도 그 다이얼로그의 흔적을 없애햐 한다..

 

너무너무 쉬운작업

그냥 초기화 함수에서

ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);

호출하면 끗!

(혹시 안되면)

DWORD dwStyle = GetWindowLong(m_hWnd, GWL_EXSTYLE);

dwStyle &= ~WS_EX_APPWINDOW;
dwStyle |= WS_EX_TOOLWINDOW; 

SetWindowLong(m_hWnd, GWL_EXSTYLE, dwStyle);
(이거 사용ㅋ)

 

설명하자면,

함수의 원형은

BOOL ModifyStyleEx(
   DWORD dwRemove,   //제거할 항목
   DWORD dwAdd,      //추가할 항목
   UINT nFlags = 0 
);

이렇게 된다..

속에 들어갈 윈도우 속성 인자들은

아래와 같고..ㅋ

  • WS_EX_ACCEPTFILES   Specifies that a window created with this style accepts drag-and-drop files.
  • WS_EX_APPWINDOW   Forces a top-level window onto the taskbar when the window is visible.
  • WS_EX_CLIENTEDGE   Specifies that a window has a 3D look — that is, a border with a sunken edge.
  • WS_EX_CONTEXTHELP   Includes a question mark in the title bar of the window. When the user clicks the question mark, the cursor changes to a question mark with a pointer. If the user then clicks a child window, the child receives a WM_HELP message.
  • WS_EX_CONTROLPARENT   Allows the user to navigate among the child windows of the window by using the TAB key.
  • WS_EX_DLGMODALFRAME   Designates a window with a double border that may (optionally) be created with a title bar when you specify the WS_CAPTION style flag in the dwStyle parameter.
  • WS_EX_LEFT   Gives window generic left-aligned properties. This is the default.
  • WS_EX_LEFTSCROLLBAR   Places a vertical scroll bar to the left of the client area.
  • WS_EX_LTRREADING   Displays the window text using left-to-right reading order properties. This is the default.
  • WS_EX_MDICHILD   Creates an MDI child window.
  • WS_EX_NOPARENTNOTIFY   Specifies that a child window created with this style will not send theWM_PARENTNOTIFY message to its parent window when the child window is created or destroyed.
  • WS_EX_OVERLAPPEDWINDOW   Combines the WS_EX_CLIENTEDGE and WS_EX_WINDOWEDGE styles
  • WS_EX_PALETTEWINDOW   Combines the WS_EX_WINDOWEDGE and WS_EX_TOPMOST styles.
  • WS_EX_RIGHT   Gives a window generic right-aligned properties. This depends on the window class.
  • WS_EX_RIGHTSCROLLBAR   Places a vertical scroll bar (if present) to the right of the client area. This is the default.
  • WS_EX_RTLREADING   Displays the window text using right-to-left reading order properties.
  • WS_EX_STATICEDGE   Creates a window with a three-dimensional border style intended to be used for items that do not accept user input.
  • WS_EX_TOOLWINDOW   Creates a tool window, which is a window intended to be used as a floating toolbar. A tool window has a title bar that is shorter than a normal title bar, and the window title is drawn using a smaller font. A tool window does not appear in the task bar or in the window that appears when the user presses ALT+TAB.
  • WS_EX_TOPMOST   Specifies that a window created with this style should be placed above all nontopmost windows and stay above them even when the window is deactivated. An application can use the SetWindowPosmember function to add or remove this attribute.
  • WS_EX_TRANSPARENT   Specifies that a window created with this style is to be transparent. That is, any windows that are beneath the window are not obscured by the window. A window created with this style receivesWM_PAINT messages only after all sibling windows beneath it have been updated.
  • WS_EX_WINDOWEDGE   Specifies that a window has a border with a raised edge.


그러나...

중요한건 이게 아니었다능..

나는 작업표시줄을 없애야 할땐, ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW); 이렇게 쓰는걸 외우고만 써서..

다시 생성할라니깐, 생각이 안나더라능...ㅡ.ㅡㅋ

 

난 왜이리 멍청한가 하는 자괴감과, 한심함이 멈먹이 된 바보인증 후에(어떻게 해야 하나..고민한지 5분후에..)

ModifyStyleEx( WS_EX_TOOLWINDOW,0 ); 

그냥 이렇게 쓰면, 다시 생겨난다...

당연한거....ㅡ.ㅡㅋ 속성을 제거 했으니, 다시 살리면 되잖아..ㅡ.ㅡㅋ

 

교훈..도대체 뭐하는 함수인지는 알고서나 함수를 쓰자..제길

Posted by cyj4369
,

bitset를 사용하면 된다.


bitset<8> a1;

char *event1 = &((VstMidiEvent *)(events->events[0]))->midiData[0];

a1 = *event1;

OutputDebugString(a1.to_string().c_str());

OutputDebugString(" ");

'Development > C/C++' 카테고리의 다른 글

[memcmp]  (0) 2012.10.12
[정적변수 static]  (0) 2012.10.12
[LPSTR, LPCSTR, LPTSTR, LPCTSTR , LPWSTR, LPCWSTR 의 의미‎]  (0) 2012.08.19
[C언어 문법: Bit field (콜론 연산자)]  (0) 2012.06.16
[Call by Value와 Call by Reference]  (1) 2012.05.05
Posted by cyj4369
,

선언 하는 헤더 파일들 순서가 바뀌어 있어서 발생 할 수 있다.

다음과 같이 처리해 준다.


//오류 발생

#include <winioctl.h>

#include "stdafx.h"

 

//정상 동작

#include "stdafx.h"

#include <winioctl.h>

'Development > visual studio' 카테고리의 다른 글

[LINK에러시 가능한 해결법 한 가지]  (0) 2012.08.20
[MFC 트레이아이콘으로 만들기]  (0) 2012.08.19
[MFC 트레이아이콘으로 만들기]  (0) 2012.08.18
[error LNK2005]  (1) 2012.08.18
[fatal error LNK1169]  (0) 2012.08.18
Posted by cyj4369
,