반응형

라즈베리파이 원격 연결하기 위해 많은 정보를 찾아보았지만 블루투스 키보드, 무선 wifi 동글이 없는 상태라

 

남들 정보를 이용해서 하기엔 많은 어려움이 있었다.

 

이걸 성공하는데 오래 걸렸지만 어렵지는 않았다.

 

 

1. (iptime을 이용하였음) 랜 선을 라즈베리파이에 연결해주었다.

 

2. http://192.168.0.1 로 접속을하면 iptime 설정 사이트에 들어갈 수 있다.

 

 

들어 갔을 때 관리자명과 비밀번호를 입력하라는 메세지가 떠서

 

wifi단말기 뒤에잇는 rst 버튼을 15초 꾹 눌러 리셋 시켜주었다. 다시 비밀번호를 묻지 않았다.

 

 

3. 관리도구에서

 

 

 

고급설정 - 내부 네트워크 정보를 보면 아이피 정보를 얻을 수 있다.

 

4. putty 혹은 xshell 등 원격 접속 프로그램을 이용해 접속한다.

 

나는 xshell 을 사용 해왔어서 xshell을 이용해 접속 했다.

 

라즈베리파이의 기존 아이디와 비밀번호는

pi/raspberry 로 설정 되어있다.

 

 

 

 

 

5. 기본 설정

 

$ sudo raspi-config

 

이명령어를 치면 언어, 시간, 키보드 등 설정을 할 수 있다.

 

 

6. 원격제어 설치

 

접속 후 라즈비안 xrdp를 설치

 

$sudo apt-get update

$sudo apt-get install xrdp

 

 

7. 원격 접속

윈도우 보조프로그램의 원격 데스크톱 연결을 실행

 

 

라즈베리파이2의 ip를 입력 후

위의 id/pwd 를 입력 하게 되면

라즈베리가 보입니다. 

 

완성!

 

 

 

반응형

라즈베리파이3을 구입하기 원했지만 해외배송이 너무 비싼지라

메카솔루션에서 제공하는 '라즈베리 종결키트'! 를 구입했다.

해당 사이트 : http://roboholic1.godo.co.kr/shop/goods/goods_view.php?goodsno=7748&inflow=naver&NaPm=ct%3Dimhbuo94%7Cci%3D9e15ad0ac38c6432801837d6e3b9bf4ec5bdd81c%7Ctr%3Dsls%7Csn%3D188145%7Chk%3D986871c786f96bbb1ef1cfcbb35468e1f036b90b

 

구성품으로는 아래와 같다. 

 옵션은 따로 추가할 시 추가 요금이 든다.

 

많은 센서를 사용해보고 싶다면 메카솔루션의 종결키트를 추천한다!

 

배송 물품을 개봉할 때 모습

 

학부생일 때도 자주 이용했지만 열심히 공부하는 고객을 위한 약과~ 정말 맛있다. 또 상품 손상을 고려해 틈틈히 감싼 뽁뽁이 안전하게 배달안오면 이상할 정도로 잘되있다.

고객을 향한 배려가 엿보이지 않는가 싶다. 

 

구성품은 하나도 빼먹지 않고 잘 도착했다.

 

드디어 라즈베리파이에 입문하게 되었다. 두근두근 설리설리~_~

 

메카솔루션 위에 url을 타고 들어가시면 해당 제품에 대한 자료들을 많이 제공한다.

제품에 대한 정보 뿐 아니라 사용법 등 2차 서비스까지 받을 수 있다.

 

이제 라즈베이파이를 만져보로 고고싱~

 

 

 

 

반응형

 

-여러 개의 태스크들 중에서 다음번 수행시킬 태스크를 선택하여 CPU라는 자원을 할당하는 과정을 스케줄링 이라고 함

-  리눅스의 태스크는 실시간 태스크와 일반 태스크로 나뉘며 각각 스케줄링 알고리즘이 구현

* 리눅스가 총 140단계의 우선순위 제공

실시간 태스크 (0~99)

일반 태스크 (100~139)

 

(1) 런 큐와 태스크

- 운영체제는 스케줄링 작업 수행을 위해, 수행 가능한 상태의 태스크를 자료구조를 통해 관리

- 이 자료구조를 런 큐(Runqueue)라 함

- 운영체제의 구현에 따라 런큐는 한개 혹은 여러개 존재 가능

- 자료구조의 모양이나 관리 방법도 달라짐

- ~/kernel/sched/sched.h 파일 내에 struct rq라는 이름으로 정의

- 부팅 이후 각 CPU별로 하나씩의 런큐를 유지

복수개의 CPU를 가진 시스템에서 리눅스의 런큐 자료구조와 태스크의 관계

 

- 새로 생성된 태스크는 부모 태스크가 존재하던 런 큐로 삽입 (더 높은 캐시 친화력 (cache affinity)를 얻을 수 있기 때문에)

- 대기 상태에서 깨어난 태스크는 대기전에 수행되던 CPU의 런 큐로 삽입

 

* 스케줄러가 수행되면 해당 CPU의 런큐에서 다음번 수행시킬 태스크를 고를 때 고려사항

1. 어떤 태스크를 선택할 것인가

   - 일반 태스크를 위해 CFS를 사용하며 실시간 태스크를 위해서 FIFO, RR, DEADLINE 정책을 제공

2. 런 큐간의 부하가 균등하지 않은 경우 어떻게 할 것인가

   - 부하 균등 (load balancing)기법을 제공

        # load_balance() 함수 : 특정 CPU가 많은 작업을 수행하고 있느라 매우 바빠 한가한 다른 CPU에 태스크를 이주(migration) 시켜서 성능 향상

 

 

(2) 실시간 태스크 스케줄링 (FIFO, RR and DEADLINE)

  - 가장 급한 태스크를 한가한 태스크보다 먼저 수행될 수 있도록 해줌 -> 높은 반응성을 보임

  - 어떤 기준에 근거하여 태스크를 골라내는지?

         -> task_struct 구조체는 policy, prio, rt_priority 등의 필드가 존재

  - 실시간 태스크 ( SCHED_FIFO, SCHED_RR, SCHED_DEADLINE)

  - 일반 태스크 (SCHED_NORMAL) , 이와 더불어 중요하지 않은 일을 수행하는 태스크가 CPU 점유를 막기 위해 SCHED_IDLE 정책, SCHED_BATCH정책이 존재

     * 리눅스 실시간 태스크란?  sched_setscheduler()등의 함수를 통해 태스크의 스케줄링 정책을 위 세가지 중 하나로 바꾸게 되면 실시간 태스크가 되는 것

  - 우선순위 설정을 위해 task_struct 구조체의 rt_priority 필드를 사용

      -> 0~99까지의 우선순위를 가질 수 있으며 태스크가 수행을 종료하거나 스스로 중지하거나 혹은 자신의 타임 슬라이스를 다쓸때까지 CPU를 사용

           => 즉 RR인 경우 동일 우선순위를 가지는 태스크가 복수개인 경우 타임 슬라이스 기반으로 스케줄링

 

  -

반응형

(1) 상태 전이와 실행 수준 변화

태스크는 생성 뒤 자신에게 주어진 일을 수행하며, 이를 위해 디스크 I/O나 락 등 CPU이외의 자원을 요청

 

특정 태스크가 당장 제공해 줄 수 없는 자원을 요청한다면?

1. 커널은 이 task를 잠시 '대기' 하도록 만듬

2. 다른 태스크를 먼저 수행

3. 태스크가 요청한 자원이 사용 가능해 지면 대기상태의 태스크를 다시 '수행'

 

 

□ EXIT_ZOMBIE 상태

- 말 그대로 죽어있는 상태. Task에게 할당되어 있던 자원을 대부분 커널에게 반납한 상태.

- 자신이 종료된 이유를 부모 태스크에게 알려주기 위해 유지 되고 있는 상태

 

□ EXIT_DEAD 상태

- 부모 Task가 wait()을 호출하면 자식 태스크의 상태가 EXIT_DEAD로 바뀜

- 부모는 자식의 종료 정보를 넘겨받고 자식태스크는 자신이 유지하던 자원을 모두 반환하고 최종 종료됨

 * 부모 task의 wait()함수 호출 전 먼저 사라지게 되면 고아 태스크가 영원히 존재해 시스템의 오버헤드로 작용됨

     --> 이 문제를 해결하기 위해 커널은 고아 task의 부모를 init task로 바꾸어줌 (task_struct 구조체에 real_parent와 parent 2개의 필드가 존재하는 이유)

 

□  TASK_RUNNING 상태

- 실제 수행중인 task의 상태 (running)과 수행되던 task가 자신에게 할당된 CPU 시간을 모두 사용하여 다시 준비중인 상태 (ready)

 

□  TASK_INTERRUPTIBLE 상태

- 실행 상태에 있던 태스크가 특정한 사건을 기다려야 할 대기상태로 전환되어 기다리는 사건에 따라 특정 큐(queue)에 매달려 대기중인 상태

- 대기하는 동안 자신이 기다리는 그 사건 외에는 일체 방해받아선 안 되는 경우가 있을 수 있는데 이 경우가 TASK_UNINTERRUPTIBLE.

- 이후 기다리던 사건 발생 시 대기 상태에 있던 TASK가 다시 준비(ready)상태로 전이하게 되며 다시 다른 태스크들과 함께 스케줄링 되기 위해 경쟁함.

  * TASK_UNINTERRUPTIBLE 상태의 Task가 시그널에 반응하지 않기때문에 생기는 문제

     -> (예> 쉘에서 'kill -9 pid' 등의 명령을 수행해도 태스크가 종료되지 않음)

         => 이를 해결하기 위해 TASK_KILLABLE 상태가 도입

 

(2) TASK_RUNNING(running) 상태의 수준

- 실제로 실행중인 TASK_RUNNING(running) 상태는 다시 사용자 수준 실행 상태와 커널 수준 실행 상태로 구분할 수 있음

 

□ 사용자 수준 실행 (user level running)

- CPU에서 사용자 수준 프로그램의 제작자가 만든 프로그램이나 라이브러리 함수를 수행하고 있는 상태로 사용자 수준의 권한으로 동작

 

□ 커널 수준 실행 (kernel level running)

- CPU에서 커널 프로그램의 일부분을 수행하고 있는 상태로, 사용자 수준 권한보다는 더 강력한 커널 수준 권한으로 동작

 

* 사용자 수준에서 커널수준 실행상태로 전이하는 방법

  1. 시스템 호출

  2. 인터럽트 발생

 

(3) 커널 수준의 프로그램

- 커널 수준의 프로그램은 바로 리눅스 그 자체임

- 리눅스도 C와 어셈블리어로 작성된 S/W이기 때문에 수행되기 위해서는 스택을 필요로 함

 

 

- 리눅스 커널은 태스크가 생성될 때마다 태스크 별로 task_struct 구조체와 8KB의 스택을 할당해 줌

- 8KB의 스택은 thread_union이라 불림, thread_info(프로세스 디스크립터) 구조체도 포함 되어있음.

-Pt_regs는 수행을 마친 task가 사용자 수준 실행상태로 복귀하기 이전 수행 작업에 대한 정보 저장 

반응형

(root 계정에서 수행)

vim 설치

# yum install vim -y

 

gcc 설치

# yum install compat-gcc-34 -y

 

#vim a.c   ( a.c라는 파일을 생성하며 내용 작성 )

 

 

:wq로 저장 후 나옴

 

gcc [옵션] [바이너너리파일] [.c파일]

 

# gcc -o a a.c

a라고 초록색으로 바이너리 파일이 생성됨

 

#./a ( 바이너리파일 a를 실행 )

 

 

* vim 환경을 제작편하도록 변경

 

# vim ~/.vimrc (새파일 생성)

 

 "새로운 행의 인덴트를 현재행과 같게 한다
set autoindent
"백업파일을 만드는 디렉토리
set backupdir=$HOME/vimbackup
"파일 보존 다이얼로그의 초기 디렉토리를 버퍼 파일 위치로 설정
set browsedir=buffer
"클립보드를Windows(와)과 제휴
set clipboard=unnamed
"Vi호환을 오프
set nocompatible
"스ž
set directory=$HOME/vimbackup
"탭 대신에 공백 문자를 삽입한다
set expandtab
"변경중의 파일에서도, 보존하지 않고 다른 파일을 표시
set hidden
"인크리멘탈 서치를 실시한다
set incsearch
"탭 문자, 줄 끝 등 불가시 문자를 표시한다
set list
"list그리고 표시되는 문자의 포맷을 지정한다
set listchars=eol:$,tab:>\ ,extends:<
"행 번호를 표시한다
set number
"시프트 이동폭
"set shiftwidth=4
"닫아 괄호가 입력되었을 때, 대응하는 괄호를 표시한다
set showmatch
"검색시에 대문자를 포함하고 있으면 대/소를 구별
set smartcase
"새로운 행을 만들었을 때에 고도의 자동 인덴트를 실시한다
set smartindent
"줄머리의 여백내에서 Tab (을)를 박으면,'shiftwidth' 의 수만큼 인덴트 한다.
set smarttab
"파일내의 <Tab> 하지만 대응하는 공백의 수
"set tabstop=4
"커서를 줄머리, 줄 끝으로 멈추지 않게 한다
set whichwrap=b,s,h,l,<,>,[,]
"검색을 파일의 선두에 루프 하지 않는다
set nowrapscan

 

 

반응형

 

1. New Virtual Machine을 클릭 후

가상 디스크를 하나로 관리할지 여러개로 분할해서 관리할지 물어보는 창이다

Store virtual disk as a single file 로 설치 

 

Customize Hardware 클릭해서 기본적인 하드웨어 설정을 해줍니다

 

필요없는 device는 삭제해주고 Memory는 성능향상을 위해 2GB로 변경후 CD에 iso파일을 넣어주고 close

 

설치를 하기위해 Install to hard Drive 클릭

 

설치는 한국말로 ~

키보드 레이아웃으로 영어설정을해주고 한글은 따로 설치해서 사용 예정

 



반응형

 1. VM ware 가상공간 생성

 

 

 

 

 

 

불 필요한 장치 제거

 

 

 2. Ubuntu 설치

 

 

 

 

 

 

반응형

리눅스 운영체제에서 기본적으로 최고 관리 권한 계정인 root 계정을 보안상의 이유로 활성화 시켜놓지 않음.

계정이 보안상의 이유로 잠겨 있기 때문입니다.

 

참고로, 일시적 최고 권한을 얻기 위해 터미널 명령에 접두사로 sudo라는 명령어를 씀.

sudo :

 -  Super User do 의 약자. 하나의 명령에 대해서 일시적으로 최고 관리 권한을 가짐

 - 현재 로그인된 계정의 암호를 물음

 

또는 일시적으로 최고 관리자 계정을 사용하기 위해 su 라는 명령어를 사용하기도 함.

su :

 - Super User의 약자

 - 최상의 권한을 갖는 유저

 - 해당 터미널 세션에 한해서 일시적으로 root 계정처럼 사용할 수 있도록 권한을 부여

 

Root 계정 암호 설정하기

초기 root을 사용하기 위해선 계정암호를 설정해야 함

 

passwd [계정명] 으로 passwd로 변경 할 수 있음.

최상위 권한을 얻어 비번을 바꾸기 위해

# sudo passswd root

후 비밀번호 설정하면됨 

 

 

 

'Study Note > OS' 카테고리의 다른 글

[Linux] Vmware 설정 및 fedora 23 설치  (0) 2016.03.23
[Linux] VMware workstation 에 Ubuntu 설치  (0) 2016.03.10
[Linux] Task 관리  (0) 2016.03.07
[Linux] 리눅스 커널 컴파일 (fedora)  (0) 2016.03.07
[Linux] 리눅스 커널 구조  (0) 2016.03.07
반응형

OS  Log성 파일 관리 Shell

OS Log성 파일 관리 Shell



개발목적 : Log File은 어떤 System을 가더라도 존재하기 마련이다. 이러한 Log File들을 관리 없이 그대로 방치하게 된다면 System 성능에 무리를 주게 된다. 이러한 이슈를 해결하고자 자동으로 생성되는 Log들을 대상으로 통합적으로 관리할 수 있도록 Shell을 작성한다. 리눅스 명령어에 대한 전반적인 이해와 DB운영에 있어 이슈가 될 만한 부분들을 자동적으로 관리하기 위한 목적으로 작성한다.

개발환경 : Ubuntu, Bourne Shell

구현내용 :

관리의 용이함을 위한 Split, Compress, Delete 수행 주기를 일 단위로 입력받는다.

사용자는 파일 리스트만을 관리하므로 수정 혹은 삭제가 가능하도록 제작한다.

crontab을 이용해 일 단위로 서비스 점검 시간에 맞춰 수행하도록 설정한다.

file list 등록 화면

전체적인 흐름도

구성

구분

구현내용

파일 리스트

log file들의 filepattern, 삭제, 스플릿의 주기와 수행 여부를 입력 받아 list형식으로 받게 제작하였다.

스플릿

쌓이는 log 파일을 출력 리다이렉션을 이용해 새로운 파일로 작성하고 그 파일들을 파일 리스트의 정보에 따라 스플릿 하게 제작하였다.

압축

저장되고 있는 log 파일들을 더욱 효율적인 메모리 공간 사용을 위해 파일 리스트의 정보에 따라 압축하도록 제작하였다.

삭제

저장되고 있는 log 파일들을 파일 리스트의 정보에 따라 삭제하도록

제작하였다.

나의 의견

처음 배우고 처음 다뤄본 Linux Shell이었지만, 처음이라는 만큼 많이 시간과 애착을 들여 작성한 Shell입니다.

테스트 환경이기 때문에 log file을 테스트하기에 직접 Shell에서 발생하는 에러를 경험하기가 어려웠습니다.

또 처음 알고리즘을 만들고 제작하였지만, 추가되는 부분에 있어 엉키는 부분이 생겨 다시 알고리즘을 그리고

제작한 고난도 있었습니다. 덕분에 알고리즘의 중요성도 재차 느끼게 되었습니다. Shell을 다른 환경으로

들고 갔을 때, 작동이 되지 않았고 이식성에 대해 고려도 해봐야 한다고 생각하여 작성하였습니다.


'Study Note > My work' 카테고리의 다른 글

Rand() 함수를 이용하여 C언어 게임 만들기  (0) 2016.03.07
Motion Controller  (0) 2016.01.25
주차 예약 시스템  (0) 2016.01.25
Android Application을 이용한 LED 제어  (0) 2016.01.25
라인트레이서  (3) 2016.01.25
반응형

Rand() 함수를 이용하여 C언어 게임 만들기

Rand() 함수를 이용하여 C언어 게임 만들기



개발목적 : 절차적 프로그래밍을 이해하면서 동시에 조건문, 반복 문과 배열을 사용하여 주어진 조건(Rand() 함수 사용)에 따라 게임을 완성하고 C언어에 대한 완벽한 이해를 위하여 제작하였다.

개발환경 : Visualstudio2010, C언어

구현내용 :

Rand() 함수를 이용하여 제공되는 특수문자들을 Random으로 나열하도록 제작하였다.

짝을 맞출 시 그 자리에 그대로 남아있고, 틀리면 다시 “?”로 돌아오게끔 제작하였다.

Hint를 사용할 시 아직 공개되지 않은 부분만 보이도록 제작하였다.

게임 설명

진행 화면

 

나의 의견

C언어를 공부에 있어 따분한 예시들을 사용하는 것이 아니라 게임을 제작함으로써 흥미도가 굉장히 높았던 것 같습니다. 게임을 제작하게 되면 프로그램이 커지게 되고 소스 코드 안에 사용되는 구문들이 자연스레 많아지고 이중, 삼중으로 사용하여 단순히 이해하는 게 아니라 직접 사용해보고 원리도 쉽게 파악했던 것 같습니다.

프로그램을 제작하면서 처음 써보는 함수들도 있었고, 사용자 정의 함수를 만들어 사용하다 보니 많은 버그도 생겼었습니다. 버그 수정 과정이 대부분 많은 시간을 차지하였고 그 시간이 길었지만, 무언가 하나하나 완성되는 과정을 보고 지루하지 않았습니다. 프로그램을 제작할 때 성능을 고려하여 자료형 변수까지 고민해가며 제작하였고, 다음 프로그램을 제작할 때도 충분히 많은 고려를 해가며 제작해야겠다고 느꼈습니다.


'Study Note > My work' 카테고리의 다른 글

OS 내 Log성 파일 관리 Shell  (0) 2016.03.07
Motion Controller  (0) 2016.01.25
주차 예약 시스템  (0) 2016.01.25
Android Application을 이용한 LED 제어  (0) 2016.01.25
라인트레이서  (3) 2016.01.25

+ Recent posts