반응형

'분류 전체보기'에 해당되는 글 212건

반응형
반응형

안드로이드 운영체제 구조는 리눅스 커널을 기반으로 만들어졌다. 안드로이드는 코드를 짜는 것도 중요하지만 os자체는 어떻게 구성되어 있는지, 또 그것이 어떤역할을 하는지에 대해 확실히 알 필요성이 있다. 그만큼 이런 구조도 확실하게 알고 있어야 개발이든 보안이든 둘다 가능하다. 




<안드로이드 os의 구조>


안드로이드 os는 굉장히 무거운 os에 속한다. 리눅스에 htop을 켜봐도 메모리 상태를 보게 되면 안드로이드 스튜디오를 돌리는 것자체로도 2GB씩 차지한다. 하지만 무거운 만한데는 다 이유는 있다. 아래 사진이 안드로이드 OS의 전체적 구조다.





1. Linux Kernel

C,C++언어를 기반으로 이루어져 있으며 리눅스 계열로 이루어진 만큼 보안이 상당히 강력하다. 주로 드라이버로 이루어져 있으며 화면드라이버, 키보드드라이버, 카메라 드라이버 등으로 구성되어져 있다.


2. Library

Linux Kernel과 마찬가지로 C,C++언어를 기반으로 이루어져 있으며, 안드로이드 앱개발에 필요한 중요한 오픈소스 기반의 솔루션들이 다 모여있다. 하지만 취약점이 많아서 보안상에 문제점이 Library쪽에서 많이 발생한다.


3. Android Runtime


구글에서 자체 제작한 Dalvik Virtual Machine, 애플리케이션 제작은 JVM으로 개발한 후에 최종적으로 Dalvik 코드로 변경해서 Target장치에서 구동한다. 안드로이드는 리눅스,라이브러리가 C, C++로 개발되어지고 이루어졌지만 자바로 개발이 가능한 이유가 JVM이라는 자바가상머신이 얹어졌기 때문에 자바로 코딩이 가능하다. 하지만 mySQL, ORACLE과 같은 엔진들은 너무 무겁기때문에 안드로이드에서는 사용하기가 어렵다.


4. Applications Framework


구글에서 JAVA로 자체 제작한 애플리케이션 프레임 페키지다. 주로 활동매니저, 윈도우매니져 등으로 구성되어있다. 말그대로 응용프로그램을 돌리기 위한 프레임워크이다.


5. Applications


이것도 Applications Framework과 마찬가지로 구글에서 JAVA로 자체 제작했다. Application에는 연락처, 전화 브라우저 등등 우리가 주로 일상생활에서 많이 사용하는 휴대폰 앱이 굉장히 많다.







반응형
블로그 이미지

만년필석사

,
반응형

그럼 지난시간에 이어 ADB명령어에는 어떤것들이 있는지 살펴보겠다. 




※ 많이 사용되는 간단한 명령어


1. adb devices - 연결된 디바이스 리스트 보기

<여러개 디바이스 연결시 리스트보는 명령어들>

adb -d logcat (device)

adb -e logcat (emulator)

adb -s emulator-xxx logcat (device serial)


2. adb backup... 디바이스로부터 앱, 데이터 등 백업하는 명령어

3. adb logcat - 디바이스 로그 보기

4. adb -d install 파일명.apk - 디바이스 파일 설치



※ 디바이스에서 많이 사용되는 adb am 명령어들


1. adb kill-server device - 인식이 잘 안될때 케이블을 꼽았다 꼽거나 adb server를 죽인다.

2. adb -d shell - 쉘실행

3. adb -d install -r 파일명.apk - 재설치 

4. adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings - 특정액티비티 실행

5. adb shell am start -a android.intent.action.VIEW -d facebook://facebook.com/inbox  - 페이스북 앱실행  

6. adb shell am start -a android.intent.action.VIEW -d file:///sdcard/me.vcard -t text/x-vcard  - sd카드 실행

7. adb shell am start -a android.intent.action.GET_CONTENT -t image/jpeg  -갤러리 실행

8. adb shell am start -a android.media.action.IMAGE_CAPTURE - 카메라 실행

9. adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings - 환경설정 실행

10. adb shell am start -a android.intent.action.VIEW http://www.google.com - 구글 실행

11. adb shell am start -a android.intent.action.DIAL tel:010XXXXXXX - 전화번호 다이얼 실행

12. adb shell am start -a android.intent.action.CALL tel:010XXXXXXX - 전화걸기 

13. adb shell am start -a android.intent.action.DAIL -d tel:010-XXXX-XXXX -전화걸기

14. adb shell am start -a android.intent.action.VIEW geo:37.111111-222.333333 - GPS 실행

15. adb shell am start -n com.android.calendar/com.android.calendar.LaunchActivity - 달력실행

16. adb shell am start -a android.intent.action.MAIN -n  패키지명/액티비티 경로 - MainActivity 실행시 사용 
ex) adb shell am start -a android.intent.action.MAIN -n com.example.gunjoolee.stopwatch/com.example.gunjoolee.stopwatch.MainActivity


<출저: http://www.dreamy.pe.kr/zbxe/CodeClip/163972>




이외에도 명령어들을 더 알고 싶으면 이 홈페이지로 가면 더 많은걸 알 수 있다.

http://developer.android.com/tools/help/adb.html





반응형
블로그 이미지

만년필석사

,
반응형

이번시간엔 안드로이드 ADB에 대해서 써본다. ADB란 안드로이드 안에 있는 디버그 툴중 하나이다. 핸드폰에 연결해서 무언가 앱을 실행하고 싶고 디버그 하고 싶을때 리눅스에 명령어만 치면 바로 실행시킬 수 있다. 너무 숨어있는 기능들이 있는데 아마 그런거 찾을때 사용하면 좋지 않나 라는 생각도 해본다. 


1. 터미널 설정



일단 맥북기준으로 설명하겠다. 일단 adb툴이 저장되어 있는 폴더의 경로를 설정해야한다. 경로는 다음과 같다.


export PATH=$PATH:/Users/사용자이름/Library/Android/sdk/platform-tools


안드로이드가 깔리면 파란색으로 표시된 경로쪽에 adb툴이 있다. 그렇기때문에 일단 경로는 저렇게 잡아주고 터미널쪽 환경설정 셸쪽에 다음과 같이 입력한다.




이렇게 경로설정이 완료되면 터미널을 실행하고 adb version을 입력시켜보면 adb가 잘 실행된다는 걸 볼 수 있다. 아래 그림과 같이 실행되면 adb명령어는 잘 실행된다.


2. iterm 설정


iterm에서도 사용하고 싶을때는 경로를 아까 파란색으로 바꿔놨던 경로를 그대로 설정해주면 된다. 조금 더 이해를 돕기위해 다음 아래 그림을 보면 된다.




이런식으로 설정해주고 아까 터미널은 그냥 adb만 입력해주면 명령어가 잘 실행이 되는데 iterm같은 경우는 조금 다르다. 만약 adb 그대로 입력하면 다음과 같은 화면이 나온다.



명령어 실행이 불가능하다고 나온다. 그래서 iterm에서 할때는 다음과 같이 입력을 해야 한다.



adb 앞에 ./을 붙여줘야 실행이 된다는걸 볼 수 있을 것이다. 그럼 하나만 더 예를 들어보면 또 다음과 같다.



지금 방금 친 명령어는 현재 연결되어있는 디바이스 리스트를 나타낸 명령어인데 항상 adb를 실행할땐 ./를 꼭 붙여줘야 한다는걸 알 수 있다. 어떻게보면 터미널에서 사용하는게 더 편할수도 있겠지만 iterm은 툴사용이 자유롭고 배우기도 어렵지 않아 적응만 하면 금방 사용할 수 있을것이다. 어떤걸 사용할 지는 본인이 선택하면 될 것 같다.

반응형
블로그 이미지

만년필석사

,
반응형

이번시간엔 멀티프로세싱이라는 개념을 포스팅해보려고 한다. 정보처리산업기사,기사공부를 하다보면 운영체제(4과목)에서 등장하는 개념이다. 자격증시험에서도 중요하게 다루어지고 있고 회사면접을 갔을때도 물어볼 수 있는 단골개념이다. 이처럼 중요한 개념이지만 4년제 컴퓨터공학과를 졸업한 학생들에게 물어보면 대다수의 학생들이 잘모른다는 이야기를 얼핏 들은 적이 있다. 그래서 내가 공부를 한 것을 바탕으로 글을쓴다.




◎ 멀티프로세싱이란?


멀티프로세싱이라고 하면 무엇이 떠오를까? 아마 용어자체의 의미에서 눈치를 챘을 수도 있다. 바로 프로세서가 서로 협력해서 일을 하는 과정이다. 소수의 프로세서를 처리할때는 단일 프로세서가 더 빠를 수도 있겠지만 사실 컴퓨터를 쓰다보면 엄청 많은 프로세서를 볼 수 있다. 그래서 많은 프로세서를 처리할때는 멀티프로세서가 훨씬 빠르다. 그럼 처리를 할때는 어떤식으로 처리를 할까? 멀티프로세서는 주로 병렬식으로 처리하는 방법을 쓰고 있다. 다음 그림을 보면 이해가 쉽게 될 수 있다.


<사진출저: 유자차 한 스푼>



위에 그림에 잘 나와있듯이 병렬처리방식으로 처리하고 있다. 근데 그림을 자세히 보면 한번에 한가지일을 맡아서 처리하는게 아니라 서로 도와주면서 처리한다는 걸 보여주고있다. 멀티프로세서는 서로 일을 분산해서 처리할 뿐만아니라 서로 도와주면서 처리하기 때문에 더 효용성이 높을 수 밖에 없다. 또한 만약 시스템이 정지가 되어도 프로세스가 다 분산이 되어있기 때문에 시스템이 다운되지 않는다. 단지 조금 느려질 뿐이다. 이처럼 신뢰성이 보장되기 때문에 멀티프로세스를 널리 사용한다. 그리고 비용면에서도 단일프로세스에 비해 저렴하다. 이러한 이유가 프로세스는 단일장치, 대용량 저장장치, 전원공급장치를 공유하고 있기때문에 비용이 저렴하다. 한마디로 서로 공유하고 도와주면 처리시간도 단축되고, 비용이 절감이 된다.










반응형

'운영체제 ' 카테고리의 다른 글

운영체제서비스  (0) 2017.01.30
이중동작모드(Dual-Mode operation)  (0) 2017.01.15
임계구역(Critical section)  (0) 2016.09.11
Context Switching  (0) 2016.09.08
DeadLock 특징들  (0) 2016.08.19
블로그 이미지

만년필석사

,
반응형

이번시간에도 지난번 포스팅에 이어서 watcher기능의 실습에 대해 올려보도록 하겠다.




1. watcher기능 


이제 본격적으로 watcher기능을 추가해서 작성하도록 하겠다. 그 전에 만들었던 zkClient2.js파일을 살짝 

변형해서 만들면 된다. 그렇게해서 최종적으로 완성한 코드는 다음과 같다. 파일명은 watcher.js로 저장한다.





그리고 이 결과를 실행하면 다음과 같은 화면이 나오면 정상적으로 실행된 것이다.





그리고 iTune에서 watcher.js파일을 실행한 상태에서 command+D를 눌러서 zkCli명령어를 입력해서 zkClient server에 접속해서 test노드를 만든다. test노드를 만들게 되면 다음과 같은 화면이 나온다.



왼쪽화면에 보면 Watcher가 ‘/test’ znode가 created 된 것을 감 지해 “Node exists.” 문구가 출력되게 되는 화면을 볼 수 있다. 


2. mongo rs의 상태정보 얻어오는 법


앞서서 mongo rs를 만들어보았다. 하지만 주키퍼로써는 어떻게 얻어오는지에 대해 살펴보도록 하겠다.


먼저 다음 명령어를 통해서 mongo rs를 실행시켜준다.


  •  sudo mongod --port 20000 --dbpath /data/db/replSet1 --replSet Mongo_study --smallfiles --oplogSize 128 --logpath /data/db/replSet_Log/mongo_replSet1.log
  •  sudo mongod --port 30000 --dbpath /data/db/replSet2 --replSet Mongo_study --smallfiles --oplogSize 128 --logpath /data/db/replSet_Log/mongo_replSet2.log
  •  sudo mongod --port 40000 --dbpath /data/db/replSet3 --replSet Mongo_study --smallfiles --oplogSize 128 --logpath /data/db/replSet_Log/mongo_replSet3.log
  •  sudo mongod --port 20017 --dbpath /data/db/replSet_Arbiter --replSet Mongo_study --smallfiles --noprealloc --nojournal --logpath /data/db/replSet_Log/mongo-replSet_Arbiter.log

그리고 GetmongoStat.js로 파일이름을 설정하고 다음과 같이 입력해준다.





이렇게 입력을 해주고 실행이 정상적으로 된다면 다음과 같은 화면이 나온다.




이걸 실행시킬때 주키퍼서버가 연결되어있다는 가정하에 실행되어야 정상적으로 동작할 것이다. 이처럼 주키퍼를 이용해서 mongo rs 정보까지 확인할 수 있다. 주키퍼는 분산데이터시스템인 용도 외에도 참 활용할 분야가 많다. 앞으로도 주키퍼에 대해 또 알게된 점이 있다면 포스팅해보도록 하겠다. 일단 주키퍼 포스팅은 여기서 마무리 하도록 하겠다.

반응형

'mongoDB > zookeeper' 카테고리의 다른 글

zookeeper의 watcher 기능 실습 1  (0) 2016.09.11
zookeeper의 watch 기능  (0) 2016.09.09
zookeeper의 특성과 간단한 실습  (0) 2016.09.08
zookeeper의 필요성  (4) 2016.09.06
블로그 이미지

만년필석사

,
반응형

리눅스를 쓰면서 수많은 명령어들이 있지만 정말 자주 쓰이는 명령어들이 있다. 그걸 한번 써보고 해서 몇가지 포스팅해본다.


1. rmdir - 디렉토리 삭제

2. touch - 파일크기가 0인 파일을 생성 (하드디스크 오류를 판단할때 주로 쓰임)

3. cat - 파일의 내용을 화면에 출력

4. find - 특정명령을 찾는 명령어

5. grep - 특정패턴을 이용해서 파일을 찾는 명령어 --> 이 명령어는 유용하게 쓰인다. 복잡한 파일 찾기에 많이 유용하다.

6. file - 파일의 종류를 확인

7. ping + 테스트하려는IP주소입력 -  IP 네트워크를 통해 특정한 호스트가 도달할 수 있는지의 여부를 테스트하는 데 쓰이는 명령어

8. netstat -네트워크의 상태

9. nbtstat -IP충돌이 발생했을시, 충돌된 컴퓨터를 찾기위한 명령어

10. which - 특정명령어의 위치를 찾아주는 명령어

11. date - 시간, 날짜등을 변경하는 명령어

12. rdate - 원격지에 있는 시간,날짜등을 받아서 시스템에 설정해주는 명령어

13. rpm - rpm을 설치하고 삭제하고 관리하는 명령어


<출저: http://vaert.tistory.com/103>


몇가지 중요한 명령어들은 지난번에 포스팅 해놔서 따로 포스팅은 해놓지 않았다. 리눅스가 쉬운건 아니지만 하나씩 해보면 언젠가 잘 다룰 수 있을 것이라고 생각한다. 

반응형
블로그 이미지

만년필석사

,
반응형

리눅스 쓸때 파일관리를 할때 유용한 명령어가 몇개 있다. 파일 보안에도 유용하게 쓰이는 명령어들을 몇개 포스팅 

해보았다.


1. .bash_history 점검

크래커가 침투하여 활개치고 난후, 활동한 내용의 종적을 감추기 위해 로그 파일과 히스토리 파일을 제거하는 경우가 있다. 히스토리 파일이 크기가 0 이라면 침투를 의심할 수 있다.


sudo find / -name.bash_history -exec ls -la {} \;

2. /dev 디렉토리의 검사


과거부터 /dev 디렉토리는 크래커가 침투하여 백도어를 자주 심던 곳이다.

실행파일이 있는지 검사하는 명령어이다.


sudo find /dev -type f -exec ls -l {} \;

3. 유저 권한 없는 파일

사용자가 할당되지 않은 파일들을 찾아 제거한다. 


sudo find / -nouser -o -nogroup -print


근래에는 잘 사용되지 않지만 .rhost 파일도 검사하여 삭제한다.


sudo find / -name.rhosts -print


<출저 : http://webdir.tistory.com/257>


반응형
블로그 이미지

만년필석사

,
반응형

이번시간엔 임계구역에 대해 포스팅 해보려고 한다. 사실 임계구역이라는 개념은 조금만 이해해보면 간단한 개념이다.

그럼 임계구역이라는게 어떤것인지 살펴보자.


1. 임계구역이란?


임계구역이란 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다. 쉽게말해 임계영역에 접근하려고 하는 스레드들은 동시에 임계영역에 접근할 수 없다는 이야기이다. 한 임계구역당 하나의 스레드만이 접근을 할 수 있다.


2. 임계구역의 동기화?


동기화(asynchronous)라는 용어에 정의에 대해서 알고 있는가? 흔히 동기화라 하면 어떤걸 일치시켜준다는 의미로 널리 쓰인다. 하지만 임계구역에서의 동기화의 의미는 기존에 쓰였던것과는 약간 다르다. 임계구역에 접근하는 스레드 순서가 잘 지켜지고 있는지에 대한 의미이다. 1번에서도 설명했듯이 임계구역엔 동시에 여러 스레드가 접근하지 못한다. 그러기때문에 스레드도 들어오는 순서가 있고 그 순서가 잘 지켜져야 원활하게 수행이 된다. 


사실 이렇게 말로만 풀어서는 임계구역이 정확히 뭔지에 대한 파악은 좀 어렵고 감이 안올 수 있다. 아래의 그림을 보자.




 임계영역에 접근하려는 3개의 스레드가 있다. 고양이를 스레드로 비유하였다.


 3개의 스레드들이 동시에 임계영역에 접근하려고 한다. 하지만 이는 알고 있듯이 문제가 발생한다. 그래서 하나의 쓰레드만 임계영역에 접근할 수 있다. 하나의 쓰레드가 임계영역에 진입하면 다른 쓰레드들은 기다린다. 위 그림에서는 쓰레드들은 Block상태가 된다.



 먼저 들어간 스레드가 임계영역을 빠져나오면, Block상태의 스레드 중에 한  스레드가 임계영역에 진입할 수 있다. 진입하지 못한 스레드는 계속 Block상태가 된다.

<출저: http://mooneegee.blogspot.kr/, 윤성우의 시스템프로그래밍>


그림을 저렇게 보면서 이해하면 임계구역이란 어떤것인지 더 확실하게 감이 왔을거라고 생각한다. 나도 저 그림을 보면서 이해를 했다.

4. 코드에서의 임계구역

<사진출저: www.google.com>


대략적으로 그림은 위와 같다. EnterCriticalSection함수가 있고 LeaveCriticalSection이라는 함수가 있다. 이 두가지를 정확히 이해를 할 수 있어야 임계영역이 무엇인지에 대해 더 확실하게 감이 잡힐 수 있다. 한 쓰레드가 EnterCriticalSection() 함수를 실행하면 사용 중이라는 선언한다.여기서 EnterCriticalSection()함수가 어떤역할을 하는지 알 수 있을 것이다. 바로 '사용중'을 표시해서 스레드들이 동시에 들어가는 것을 막아주는 역할을 하게 된다. 그러면 다른 thread에 의해 EnterCriticalSection() 함수가 호출되면 이미 사용 중이기 때문에 이 스레드는 BLOCK 상태가 된다. 만약에 하나의 스레드가 완전히 다 실행이 되서 빠져나오면 다른 스레드들이 Block이 풀리면서 임계영역쪽으로 접근을 하게 된다. LeaveCriticalSection() 함수는 어떤 쓰레드가 임계영역을 빠져나올 때, 다른 쓰레드들이 임계구역을 사용할 수 있도록 해주기 위한 함수이다. 사용을 마치고 LeaveCriticalSection() 함수를 호출하면, EnterCriticalSection() 함수를 호출했다가 BLOCK 상태가 된 쓰레드가 있다면 그 쓰레드는 BLOCK 상태에서 빠져나와서 임계영역에 진입하게 된다. 이처럼 임계영역에는 한 구역에 한번에 하나의 스레드들이 접근한다는 것을 알아두면 좋을 것 같다.



대략 이런식으로 임계구역에 대해서 포스팅 해보았다. 처음엔 무슨 말인지 잘 몰랐지만 그림으로 이해하면 굉장히 쉬웠을 것이다. 임계구역에 대한 정보는 더 많을 수 있는데, 그것은 한번 더 공부하고 찾아보면서 해보아야 할 것 같다.




반응형

'운영체제 ' 카테고리의 다른 글

이중동작모드(Dual-Mode operation)  (0) 2017.01.15
멀티프로세싱(Multi Processing)이란?  (0) 2016.09.20
Context Switching  (0) 2016.09.08
DeadLock 특징들  (0) 2016.08.19
가상메모리  (0) 2016.08.10
블로그 이미지

만년필석사

,