2011년4월11일..for문, PC정리, VMWare Player로 리눅스 연습, vi editor

1. for문 (예제3-21)

clip_image001

if문과 마찬가지로 for문도 중괄호가 없으면 다음에 오는 명령문 한 줄을 제어문에 종속시킨다.
이럴 때는 교과서에 나온 것처럼 for문 다음에 쓰지 말고 개행한 뒤에 들여쓰기를 해야 보기 좋다.
제일 좋은 것은 하나의 명령문이라도 중괄호로 묶어 주는 것이다.

clip_image002

for문 다음에 ‘;’ 명령문의 끝 문자가 놓이면 ‘;’도 하나의 명령문으로 취급하여 아무 일도 하지 않고 for문의 조건이 만족하지 않을 때까지 증감식 즉, i의 값을 증가시키기만 하고 끝나 결과적으로 i의 값은 6이 된다. (컴파일 옵션에 따라 다름)

clip_image003

<일반적인 데이터이동과 연산>
①메모리로 부터 i의 값을 읽어와 레지스터에 저장.
②레지스터의 값을 ALU에서 1증가시킴.
③1증가시킨 결과값을 레지스터에 저장.
④레지스터에 값을 메모리(i의 주소)로 이동.

상기와 같이 1을 증가시키는데 4가지의 일(다를 수 있음)을 수행하게 되나 이렇게 CPU외부 버스로 데이터의 이동이 여러번 발생하면 처리속도가 느려지므로 캐쉬를 사용하여 캐쉬에서 1씩 증가시키는 작업을 조건문만큼 반복하고 난 뒤에 아래와 같이,

clip_image004

마지막에 캐쉬에서 레지스터를 거쳐 메모리로 전송되는지 아니면 캐쉬에서 바로 되는지는 모르겠으나 어쨋든 i에는 최종적으로 6이라는 값이 들어간다. 이를 CPU내부에서 최적화한다고 한다.
이렇게 캐쉬와 연산을 수행해 버리면 처리속도가 빨라 좋으나 프로그래머가 for문을 이용하여 시간지연을 주고 싶을 땐 예상과 다른 결과가 나오게 된다. 이럴 때 int앞에 volatile을 붙여,

volatile int i;

라고 선언하면 최적화를 하지 않아 캐쉬를 사용하지 않고 상기의 그림과 다르게 ‘일반적인 데이터이동과 연산’ 4단계를 반복하게 된다.
무의미한 데이터이동과 연산을 반복하여 프로그래머가 원하는 시간지연을 만들 수 있다.
PC에서는 캐쉬를 사용하여 수행속도 최적화를 하는 것이 좋고 임베디드에선 어플리케이션에 따라 무의미하게 시간을 보내는 처리가 필요할 때가 있으므로 volatile을 붙여 줄 필요도 있다.

clip_image005

for문은 상기의 스크린샷과 같이 세 개의 명령으로 구성되어 있으며 이를 풀어 쓰면,

clip_image006

초기식은 없어도 되고 ‘,’'(콤마)로 구분하여 여러 초기식을 쓸 수 있다. ex) i = 1, j = 100, k = 0…
조건식은 while문에서와 같이 조건이 참이면 다음에 오는 명령어 묶음을 조건이 거짓이 될 때까지 반복한다.
증감식은 ‘}’ (중괄호 닫힘)의 전에 수행되고 초기식과 마찬가지로 없거나 다수 존재할 수 있다.

예제3-21의 for문을 while문으로 바꾸면,

clip_image007

i를 1로 초기화하고 while문 안에 i의 값을 1증가시키는 증감식이 들어간다.
풀어 쓰면 이해하긴 편하겠으나 여러 줄이 되어 버리니 for문이 좋겠다. for문을 잘 이해하면 일정횟수 반복시킬 때 좋겠다.

for문의 초기식과 증감식은 없어도 된다고 하였다. 그 식들을 밖으로 빼면,

clip_image008

while문과 비슷하게 되었다. 확실히 for문 안에 다 집어 넣으면 초기에 어떤 값이고 몇 씩 증감하여 어떤 조건을 만족해야 반복하는지 쉽게 알 수 있어 좋다.

★for문과 while문 중 어느 제어문(반복문)이 빠른가?

따지지 말자. C언어에는 속도 개념자체가 없다.
그러나 switch문과 if-else문에선 컴파일러에 따라 차이가 있다. (컴파일러 발전으로 앞으로 없어지는 경향)

★CPU의 차이로 인한 속도차

CPU마다 기계어가 다르고 C컴파일러도 다르므로 intel사와 Atmel사의 CPU에서 차이가 날 수 있다.

무료 컴파일러 vs 유료 컴파일러

당연히 유료컴파일러의 성능이 좋다. 많이 투자를 했으니 그 결과가 나오는 것은 당연하다.
GCC의 장점은 무료라 성능은 조금 떨어져도 많은 CPU를 지원함.
UNIX 워크샵(비주얼 스튜디오 비슷한 개발툴)의 컴파일 명령은,
# cc –o 실행파일명 소스파일명.c ( cc는 C Compiler )

2. 예제3-22

clip_image009clip_image010

①초기식을 수행함. 보통 제어변수의 초기화를 함.
②조건식이 참이면 ③번으로 아니면 for문 탈출
③반복될 명령문을 실행.
④증감식을 수행함. 보통 제어변수의 증감연산.

○흐름을 제어한다고 하여 제어문이라고 부른다.

(PC정리 넣을까? msconfig, regedit)

3. VMWare Player설치

Virtual Machine: 가상 컴퓨터

다운받은 VMware-player-3.1.4-385536.exe파일을 실행.

clip_image011clip_image012

Next…

clip_image014clip_image016

설치경로 정하고 Next…업데이트 체크할 것인지 Next…

clip_image018clip_image020

나는 빠른 실행 아이콘이 생기는 것을 원치 않는다. 체크해제 후 Next…

clip_image022clip_image024

Continue를 클릭하면 설치가 진행된다.

clip_image026

재시작을 하라고 한다. 중요한 작업들 모두 저장 후에 재시작하자.

4. VMWare Player로 리눅스OS설치된 가상컴퓨터를 사용해 보자.

clip_image027아이콘을 클릭하여 실행하면,

clip_image029

라이센스 동의하고 OK…

clip_image030clip_image031

와우학생용6G 가상 컴퓨터 파일을 연다.

clip_image032clip_image034clip_image035

가상머신 시작을 하면 업데이트할 꺼냐고 나온다. 다음에 한다를 클릭…

clip_image036clip_image038

IP라고 하는 것을 보니 네트워크 관련인 것 같은데 FAILED가 뜬다.
아직 네트워크 어뎁터를 사용하지 않아서 그런가?

clip_image039clip_image041

ID와 password를 입력하라고 나온다.
ID: root
pass: 1 (비밀번호가 매우 취약함)
사용자이름과 비밀번호를 입력..

clip_image042

‘그놈’의 시작화면이 뜨고,

clip_image043

귀여운 펭귄과 남극의 배경이 바탕화면으로 되어 있다.

clip_image044

상단 중앙에 모니터에 한이라고 적힌 ‘한글 X11 터미널’ 아이콘을 클릭하면,

clip_image045

어디서 많이 본…cygwin과 비슷한 창이 뜬다.

clip_image047

clip_image049

간단히 터미널을 사용해 보았다.

다음은 전원관련…

clip_image051

Reset과 Power Off는 컴퓨터를 강제로 종료시키므로 사용하지 말고,
Suspend는 윈두우xp의 최대절전모드와 같으니 적극적으로 사용하자.
메모리의 내용이 하드디스크로 복사되어 다음에 사용시 빠르게 로딩이 된다.

Suspend를 클릭하면…

clip_image053

창이 작아지면서 아까 작업했던 화면이 작게 표시된다. 다시 가상머신을 시작하면,

clip_image055

이렇게 작업했던 순간이 다시 재현된다.

 

○윈도우에서도 최대절전모드를 사용해 보자.

image image

바탕화면에서 오른클릭하여 ‘디스플레이 등록 정보’로 들어가 화면보호기 탭에서 전원버튼을 클릭한다.
다음 ‘최대 절전 모드’ 탭에서 최대절전모드 체크…

image

고급탭에서 전원 단추를 눌렀을 때 최대 절전 모드로 되게 한 뒤에 확인을 클릭한다.

 

5.컴퓨터 이름변경과 IP고정하기(윈도우)

clip_image057이름과 그룹을 변경하고 확인…

clip_image059설명은 본인의 이름으로 변경…

clip_image061

네트워크 및 공유 센터에서 어뎁터 설정 변경클릭…

clip_image063

“로컬 영역 연결” 클릭 후 오른 클릭하면 메뉴가 뜨는데 거기서 속성을 클릭…

clip_image065clip_image067

인터넷 프로토콜 버전 4 (TCP/IPv4)를 더블클릭…

IP주소: 192.168.10.14 (자기 출석번호에 10을 더함)
서브넷 마스크: 자동으로 채워짐.
기본 게이트웨이: 192.168.10.1
기본DNS서버: 210.94.0.7

6. IP고정하기 (리눅스)

clip_image069

우선 가상머신세팅에 들어가서,

clip_image071

네트워크 어뎁터만 스크린샷에서와 같이 모두 체크하고 다른 하드웨어는 모두 체크를 없앤다.

clip_image073터미널창에서 setup입력 후 엔터…

clip_image075네트워크 환경설정…

clip_image077네트워킹 세트 업 할 것인지? Yes

clip_image079IP만 다르게 출석번호에 40을 더함.

clip_image081

# /etc/init.d/network restart 를 입력하면 스크린샷과 같이 여러 단계를 거쳐 네트워크 다시 시작(?)한다.

ifconfig은 윈도우의 ipconfig과 비슷한 명령으로 inet addr에 설정한 192.168.10.44가 들어갔는지 확인한다.
스크린샷은 집에서 한 것이라 학교와 다르게 세 번째 자리가 0이다.

clip_image083# halt를 입력하면 시스템종료된다.

다시 시작하여 로그인한 뒤에 터미널창에서,

clip_image085

telnet으로 인터넷이 되는지 확인한다. (해커스쿨~)

7.공유폴더만들기

clip_image087clip_image089

가상머신세팅 – 옵션탭에서 Always enabled라디오 버튼을 클릭…
기존의 폴더 one을 지워버리고 추가버튼 클릭…마법사시작에서 Next…
D드라이브에 폴더 만들고 이름은 shared로 함. (한글로 하면 안 됨.)

clip_image091clip_image093

Read-only를 체크하면 읽기만 가능하므로 체크해제된 상태로 두고 enabled this share만 체크하고 완료…
윈도우와 공유폴더 만들기 완료.

clip_image095

공유폴더로 이동하기…
아무것도 없는 상태…

clip_image097clip_image099

윈도우 탐색기에서 텍스트파일을 하나 만든다. test.txt만들었다.

clip_image101

다시 리눅스로 돌아와 # ls -al을 쳐서 파일이 생성되었는가 확인…ok

 

8. 리눅스 메모장 vi

image 

①Command 모드: 글자치면 명령어로 취급. 복사, 붙여넣기, 지우기(잘라내기)등의 명령. 
②Edit 모드: 자유롭게 편집할 수 있음. (윈도우 메모장과 같음)
③확장명령모드: 행이동 및 저장, 나가기등의 명령.

 

<Command 모드>

●내용지우기
‘dd’ – 현재 행 지우기. (잘라내기)
’d’ + 숫자 + ‘↓’키 – 현재 행 밑으로 숫자 만큼 지우기.(잘라내기) (화살표방향이 위로 향하면 위에 행들을 지움.)
’d’ + 999 + ‘↓’키 – 첫 째 행에 있었으면 모든 내용을 지울 수 있다.

●내용복사 & 붙여넣기
’yy’ – 현재 행 복사.
’y’ + 숫자 + ‘↓’키 – 현재 행에서 밑으로 숫자 만큼 복사하기. (화살표방향이 위로 향하면 위에 행들을 복사.)
’P’ – 위로 붙여넣기. (윈도우 메모장 Ctrl+V와 같음)
’p’ – 밑으로 붙여넣기. 현재 선택된 행의 다음 행에 붙여넣음.


’u’ – undo  되돌리기.

●커서이동
’o’ - home키와 같이 그 행의 첫 째 열로 커서를 이동.
’$’ - end키와 같이 그 행의 마지막 열로 커서를 이동.

‘h’ - ←키
’k’ - ↑키
’j’ - ↓키
’l’ - ↓키와 같이 커서를 이동시킴. (Edit모드에선 화살표키가 되고 명령모드에선 h,j,k,l키로 이동.
가급적 키보드에서 손을 떼지 않도록 되어 있음.

‘w’ -