2011년4월11일..for문, PC정리, VMWare Player로 리눅스 연습, vi editor
1. for문 (예제3-21)
if문과 마찬가지로 for문도 중괄호가 없으면 다음에 오는 명령문 한 줄을 제어문에 종속시킨다.
이럴 때는 교과서에 나온 것처럼 for문 다음에 쓰지 말고 개행한 뒤에 들여쓰기를 해야 보기 좋다.
제일 좋은 것은 하나의 명령문이라도 중괄호로 묶어 주는 것이다.
for문 다음에 ‘;’ 명령문의 끝 문자가 놓이면 ‘;’도 하나의 명령문으로 취급하여 아무 일도 하지 않고 for문의 조건이 만족하지 않을 때까지 증감식 즉, i의 값을 증가시키기만 하고 끝나 결과적으로 i의 값은 6이 된다. (컴파일 옵션에 따라 다름)
<일반적인 데이터이동과 연산>
①메모리로 부터 i의 값을 읽어와 레지스터에 저장.
②레지스터의 값을 ALU에서 1증가시킴.
③1증가시킨 결과값을 레지스터에 저장.
④레지스터에 값을 메모리(i의 주소)로 이동.
상기와 같이 1을 증가시키는데 4가지의 일(다를 수 있음)을 수행하게 되나 이렇게 CPU외부 버스로 데이터의 이동이 여러번 발생하면 처리속도가 느려지므로 캐쉬를 사용하여 캐쉬에서 1씩 증가시키는 작업을 조건문만큼 반복하고 난 뒤에 아래와 같이,
마지막에 캐쉬에서 레지스터를 거쳐 메모리로 전송되는지 아니면 캐쉬에서 바로 되는지는 모르겠으나 어쨋든 i에는 최종적으로 6이라는 값이 들어간다. 이를 CPU내부에서 최적화한다고 한다.
이렇게 캐쉬와 연산을 수행해 버리면 처리속도가 빨라 좋으나 프로그래머가 for문을 이용하여 시간지연을 주고 싶을 땐 예상과 다른 결과가 나오게 된다. 이럴 때 int앞에 volatile을 붙여,
volatile int i;
라고 선언하면 최적화를 하지 않아 캐쉬를 사용하지 않고 상기의 그림과 다르게 ‘일반적인 데이터이동과 연산’ 4단계를 반복하게 된다.
무의미한 데이터이동과 연산을 반복하여 프로그래머가 원하는 시간지연을 만들 수 있다.
PC에서는 캐쉬를 사용하여 수행속도 최적화를 하는 것이 좋고 임베디드에선 어플리케이션에 따라 무의미하게 시간을 보내는 처리가 필요할 때가 있으므로 volatile을 붙여 줄 필요도 있다.
for문은 상기의 스크린샷과 같이 세 개의 명령으로 구성되어 있으며 이를 풀어 쓰면,
초기식은 없어도 되고 ‘,’'(콤마)로 구분하여 여러 초기식을 쓸 수 있다. ex) i = 1, j = 100, k = 0…
조건식은 while문에서와 같이 조건이 참이면 다음에 오는 명령어 묶음을 조건이 거짓이 될 때까지 반복한다.
증감식은 ‘}’ (중괄호 닫힘)의 전에 수행되고 초기식과 마찬가지로 없거나 다수 존재할 수 있다.
예제3-21의 for문을 while문으로 바꾸면,
i를 1로 초기화하고 while문 안에 i의 값을 1증가시키는 증감식이 들어간다.
풀어 쓰면 이해하긴 편하겠으나 여러 줄이 되어 버리니 for문이 좋겠다. for문을 잘 이해하면 일정횟수 반복시킬 때 좋겠다.
for문의 초기식과 증감식은 없어도 된다고 하였다. 그 식들을 밖으로 빼면,
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
①초기식을 수행함. 보통 제어변수의 초기화를 함.
②조건식이 참이면 ③번으로 아니면 for문 탈출
③반복될 명령문을 실행.
④증감식을 수행함. 보통 제어변수의 증감연산.
○흐름을 제어한다고 하여 제어문이라고 부른다.
(PC정리 넣을까? msconfig, regedit)
3. VMWare Player설치
Virtual Machine: 가상 컴퓨터
다운받은 VMware-player-3.1.4-385536.exe파일을 실행.
Next…
설치경로 정하고 Next…업데이트 체크할 것인지 Next…
나는 빠른 실행 아이콘이 생기는 것을 원치 않는다. 체크해제 후 Next…
Continue를 클릭하면 설치가 진행된다.
재시작을 하라고 한다. 중요한 작업들 모두 저장 후에 재시작하자.
4. VMWare Player로 리눅스OS설치된 가상컴퓨터를 사용해 보자.
라이센스 동의하고 OK…
와우학생용6G 가상 컴퓨터 파일을 연다.
가상머신 시작을 하면 업데이트할 꺼냐고 나온다. 다음에 한다를 클릭…
IP라고 하는 것을 보니 네트워크 관련인 것 같은데 FAILED가 뜬다.
아직 네트워크 어뎁터를 사용하지 않아서 그런가?
ID와 password를 입력하라고 나온다.
ID: root
pass: 1 (비밀번호가 매우 취약함)
사용자이름과 비밀번호를 입력..
‘그놈’의 시작화면이 뜨고,
귀여운 펭귄과 남극의 배경이 바탕화면으로 되어 있다.
상단 중앙에 모니터에 한이라고 적힌 ‘한글 X11 터미널’ 아이콘을 클릭하면,
어디서 많이 본…cygwin과 비슷한 창이 뜬다.
간단히 터미널을 사용해 보았다.
다음은 전원관련…
Reset과 Power Off는 컴퓨터를 강제로 종료시키므로 사용하지 말고,
Suspend는 윈두우xp의 최대절전모드와 같으니 적극적으로 사용하자.
메모리의 내용이 하드디스크로 복사되어 다음에 사용시 빠르게 로딩이 된다.
Suspend를 클릭하면…
창이 작아지면서 아까 작업했던 화면이 작게 표시된다. 다시 가상머신을 시작하면,
이렇게 작업했던 순간이 다시 재현된다.
○윈도우에서도 최대절전모드를 사용해 보자.
바탕화면에서 오른클릭하여 ‘디스플레이 등록 정보’로 들어가 화면보호기 탭에서 전원버튼을 클릭한다.
다음 ‘최대 절전 모드’ 탭에서 최대절전모드 체크…
고급탭에서 전원 단추를 눌렀을 때 최대 절전 모드로 되게 한 뒤에 확인을 클릭한다.
5.컴퓨터 이름변경과 IP고정하기(윈도우)
네트워크 및 공유 센터에서 어뎁터 설정 변경클릭…
“로컬 영역 연결” 클릭 후 오른 클릭하면 메뉴가 뜨는데 거기서 속성을 클릭…
인터넷 프로토콜 버전 4 (TCP/IPv4)를 더블클릭…
IP주소: 192.168.10.14 (자기 출석번호에 10을 더함)
서브넷 마스크: 자동으로 채워짐.
기본 게이트웨이: 192.168.10.1
기본DNS서버: 210.94.0.7
6. IP고정하기 (리눅스)
우선 가상머신세팅에 들어가서,
네트워크 어뎁터만 스크린샷에서와 같이 모두 체크하고 다른 하드웨어는 모두 체크를 없앤다.
# /etc/init.d/network restart 를 입력하면 스크린샷과 같이 여러 단계를 거쳐 네트워크 다시 시작(?)한다.
ifconfig은 윈도우의 ipconfig과 비슷한 명령으로 inet addr에 설정한 192.168.10.44가 들어갔는지 확인한다.
스크린샷은 집에서 한 것이라 학교와 다르게 세 번째 자리가 0이다.
다시 시작하여 로그인한 뒤에 터미널창에서,
telnet으로 인터넷이 되는지 확인한다. (해커스쿨~)
7.공유폴더만들기
가상머신세팅 – 옵션탭에서 Always enabled라디오 버튼을 클릭…
기존의 폴더 one을 지워버리고 추가버튼 클릭…마법사시작에서 Next…
D드라이브에 폴더 만들고 이름은 shared로 함. (한글로 하면 안 됨.)
Read-only를 체크하면 읽기만 가능하므로 체크해제된 상태로 두고 enabled this share만 체크하고 완료…
윈도우와 공유폴더 만들기 완료.
공유폴더로 이동하기…
아무것도 없는 상태…
윈도우 탐색기에서 텍스트파일을 하나 만든다. test.txt만들었다.
다시 리눅스로 돌아와 # ls -al을 쳐서 파일이 생성되었는가 확인…ok
8. 리눅스 메모장 vi
①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’ -
'내장형하드웨어 > 일일보고서' 카테고리의 다른 글
2011년4월13일..for문에서 초기식과 증감식의 변형, gdb(GNU Debugger), 무한반복문, 마인드스톰 자동차 개조 (0) | 2011.04.14 |
---|---|
2011년4월12일..마인드스톰 소리발생, 자유과제(초음파레이더를 장착한 원격제어감시 지능형 자동차) (0) | 2011.04.13 |
2011년4월7일...symbol table(메모리), 디버깅 변수값확인, 마인드스톰 Tribot light sensor (0) | 2011.04.07 |
2011년4월6일…while문(반복문), VS6.0에서 디버깅모드, 마인드스톰Tribot touch (0) | 2011.04.07 |
2011년4월5일...if문, switch문, BricxCC (마인드스톰 Tribot) (2) | 2011.04.07 |