2016년 3월 31일 목요일

[ LINUX] top 명령어

http://bluelimn.tistory.com/entry/Linux-Top-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B2%95


[Linux] Top 명령어 사용법





시스템 사용량 확인(windows에서 작업관리자에서 보는 화면과 비슷한 기능)


[사용법]
$ top [옵션]

[화면 내용들]
top - 14:16:52 up 4 days,  5:25,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 131 total,   1 running, 130 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.4%us,  0.3%sy,  0.0%ni, 97.0%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8140668k total,  7900820k used,   239848k free,  3074544k buffers
Swap:  8349692k total,    13476k used,  8336216k free,  3792984k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

각 라인별 내용 
top - 14:16:52 up 4 days,  5:25,  3 users,  load average: 0.00, 0.01, 0.05
현재 시간, uptime (서버 uptime), 현재 로그인 유저수 , 로드 에버리지 1분 5분 15분

 로드 에버리지(load average)란? 
 - 작업의 대기시간 , 값이 1이라면 1분동안 평균 1개의  프로세스가 대기상태임을 나타낸다.
   보통 5이면 서버가 부하를 받는다고 생각함, 10~15면 과부하

Tasks: 131 total,   1 running, 130 sleeping,   0 stopped,   0 zombie 
전체 프로세스 수, 현재 실행중인 프로세스, 유휴상태 프로세스, 정지상태 프로세스, 좀비 프로세스

Cpu(s):  2.4%us,  0.3%sy,  0.0%ni, 97.0%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
사용자가 사용중인 CPU 사용률(us), 시스템이 사용하는 CPU 사용률(sy), NICE 정책에 의해 사용되는 CPU 사용률(ni), 사용되지 않은 CPU의 미사용률(id), 입출력 대기상태의 사용률(wa)

Mem:   8140668k total,  7900820k used,   239848k free,  3074544k buffers 
전체 물리적인 메모리, 사용중인 메모리(used), 사용되지 않는 여유 메모리(free), 버퍼된 메모리(buffers)

Swap:  8349692k total,    13476k used,  8336216k free,  3792984k cached 
전체 스왑 메모리, 사용중인 스왑 메모리, 남아있는 스왑메모리, 캐싱메모리

세부정보 필드명
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    * PID : 프로세스 ID (PID)
    * USER : 프로세스를 실행시킨 사용자 ID
    * PRI : 프로세스의 우선순위 (priority)
    * NI : NICE 값. 일의 nice value값이다. 마이너스를 가지는 nice value는 우선순위가 높음.
    * VIRT : 가상 메모리의 사용량(SWAP+RES)
    * RES : 현재 페이지가 상주하고 있는 크기(Resident Size)
    * SHR : 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합.
    * S : 프로세스의 상태 [ S(sleeping), R(running), W(swapped out process), Z(zombies) ]
    * %CPU : 프로세스가 사용하는 CPU의 사용율
    * %MEM : 프로세스가 사용하는 메모리의 사용율
    * COMMAND : 실행된 명령어

[명령 실행 후 사용하는 옵션들]
1 :  cpu 갯수별 사용량 보기
shift + m : 메모리 사용량이 큰 순서로 정령
shift + p : CPU 사용량이 큰 순서로 정렬
shift + t : 실행시간이 큰 순서로 정렬
k : 프로세스  kill  - k 입력 후 종료할 PID 입력 signal을 입력하라고 하면 kill signal인 9를 입력
c : 명령인자 표시/비표시
space bar : refresh
u : 입력한 유저의 프로세스만 표시 - which u

2016년 3월 23일 수요일

[ Linux ] 가상 메모리의 의미

https://kldp.org/node/38864

한 프로세스에서 메모리 주소는 실제 메모리의 물리적인 주소가 아닌 하드웨어적으로 변경된 논리적인 주소입니다. 
즉, 특정 메모리를 일반 프로그램에서 접근하려 하면 그 논리주소를 실시간으로 물리주소로 변경한후 그 곳의 내용을 읽어서 넘겨주지요.
이렇게 하기 때문에 하나의 물리적인 메모리를 수 많은 프로세스가 사용해도 단편화되지 않은 일련의 큰 메모리 주소를 얻을 수 있게되는거죠.


http://egloos.zum.com/sweeper/v/2988689

1. 프로세스와 가상 메모리

모든 프로세스는 자신만의 가상 주소 공간을 가지고 있다.
32비트/64비트 프로세스는 각 비트수에 맞게 최대 4GB/16EB의 주소 공간을 가진다.

모든 프로세스들은 자신만의 주소 공간을 가지기 때문에,
특정 프로세스 내에서 쓰레드가 수행될 때 해당 쓰레드는 프로세스가 소유하고 있는 메모리에 대해서만 접근이 가능하다.
다른 프로세스에 의해 소유된 메모리는 숨겨져 있으며, 접근이 불가능하다.

윈도우에서는 운영체제 자체가 소유하고 있는 메모리 또한 숨겨져 있다.
이는 특정 프로세스의 수행 중인 쓰레드가 운영체제의 데이터에 접근하는 것이 불가능함을 의미한다.

따라서, A 프로세스가 0x12345678 주소에 무엇인가를 저장하였지만,

B 프로세스 역시 0x12345678 주소에 무엇인가를 저장할 수 있으며, 이 주소들은 완전히 독립되어 있는 것이다.


가상 메모리는 프로세스의 logical memory와 physical memory를 분리하기 위해 생겨난 것이라 할 수 있다.

2016년 3월 13일 일요일

[ C언어 ] 이스케이프 시퀀스









  이스케이프 시퀀스

줄 바꿈

\n

가로 탭

\t

세로 탭

\v

백스페이스

\b

캐리지 리턴

\r

폼 피드

\f

경고

\a

백슬래시

\\

물음표

? 또는 \?

작은따옴표

\'

큰따옴표

\"

null 문자

\0

8진수

\ooo

16진수

\xhhh

유니코드(UTF-8)

\uxxxx

유니코드(UTF-16)

\Uxxxxxxxx

 

2016년 3월 10일 목요일

[ GCC ] 옵션 정리

http://devanix.tistory.com/169


[ GCC 전역 옵션]
옵션설명
-E전처리 과정 화면에 출력
-S어셈블리 파일 생성
-c오브젝트 파일 생성
-v컴파일 과정 화면에 출력
--save-tmps컴파일 시 생성되는 중간 파일 저장
-da컴파일 과정에서 생성되는 중간 코드 생성(RTL 파일 등 생성)

[ 전처리기(cpp0) 옵션]
옵션설명
-l[패스]헤더 파일을 탐색할 디렉토리 지정 (ex_: -l/opt/include)
-include[헤더 파일 패스]해당 헤더 파일을 모든 소스 내 추가 (ex_: -include /root/my.h)
-D[매크로]외부에서 #define 지정 (ex_: -DDEBUF)
-D[매크로]=[매크로 값]외부에서 해당 매크로를 정의하고 값을 지정 (ex_: -DDEBUG=1)
-U[매크로]외부에서 #endef 지정 (ex_ -UDEBUG)
-M 또는 -MMmake 기술 파일을 위한 소스 파일의 종속 항목 출력
-nostdinc표준 C 헤더 파일을 include하지 않음
-C전처리 과정에서 주석을 제거하지 않음
-Wp,[옵션 리스트]옵션 리스트를 전처리기에 바로 전달

[ C컴파일러(cc1) 옵션]
- C 언어 옵션 -
옵션설명
-ansiANSI C 문법으로 문법 검사
-std=[c 표준]지정한 C 표준으로 문법 검사 (표준:c89, c99, gnu89, gnu99 등)
-traditionalK&R C문법으로 문법 검사
-fno-asmasm, inline, typeof 키워드를 사용하지 않음(gnu89 문법 기준)
- 경고 옵션 -
-Wall -W모든 경고 메시지 출력
-w모든 경고 메시지 제거
-Werror모든 경고를 오류로 취급하여 컴파일 중단
-pedanticC89 표준에서 요구하는 모든 경고 메시지를 표시
-pedantic-errorsC89 표준에서 요구하는 모든 오류 메시지를 표시
-WtraditionalANSI C와 K&R C 간에 서로 다른 결과를 가져올 수 있는 부분이 있다면 경고
- 최적화 옵션 -
-O0아무런 최적화를 수행치 않음
-O1 또는 -O최적화 레벨 1 수행
-O2최적화 레벨 2 수행
-O3최적화 레벨 3 수행
-O4사이즈 최적화 수행
- 디버깅 옵션 -
-g바이너리 파일에 디버깅 정보 삽입
-pg프로파일을 위한 코드 삽입

[ 어셈블리(as) 옵션]
옵션설명
-Wa,[옵션 리스트]어셈블러에게 옵션 리스트를 바로 전달
-Wa,-al어셈블된 코드와 인스트럭션을 보임
-Wa,-as정의된 심볼을 보임

[ 링크(ld) 옵션]
옵션설명
-L[패스]라이브러리 탐색 디렉토리 지정 (ex_: -L/opt/lib)
-l[라이브러리 이름]해당 라이브러리를 링크 (ex_: -lm)
-shared공유 라이브러리를 우선하여 링크
-static정적 라이브러리를 우선하여 링크
-nostdlib표준 C 라이브러리를 사용하지 않음
-Wl,[옵션 리스트]

[C언어] 라이브러리

https://wiki.kldp.org/HOWTO/html/Program-Library-HOWTO

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C/Documents/Make_Library

[ Linux ] 커널 버전 숫자에 대한 의미

1. 커널버전 의미
커널버전 : Linux-2.6.18

제일 첫번째 2에 해당하는 부분은 Major number로 주 버전을 의미한다.

두번째 6에 해당하는 부분은 Minor number로 이 번호가
    홀수일때와
    짝수일 때의 버전이 다르다.

    짝수일때는 안정버전이며,
    홀수일때는 개발 버전이다.

    예제에서는 6 짝수이므로 안정버전이다.


마지막 세번째 해당하는 부분은 Patch된 횟수를 나타내므로
예제에서는 18번 Patch되었음을 알 수 있다.

HOME