불펌 방지



가정부로 이해한다 - CPU 구조 (1~4) Assembly

공유하기 버튼

 
 

CPU의 이해 Assembly

CPU를 이루는 주요 구성요소는 ALU, 레지스터, 컨트롤 유닛, 버스 인터페이스이다.
이들이 서로 상호 작용하면서 CPU가 동작하게 되는 것이다.
구성요소 하나 하나가 어떠한 기능을 제공하는지 아래에 설명 할 것이다.


ALU(Arithmetic Logic Unit)

CPU는 덧셈이나 뺄셈과 같은 연산을 진행하는 주체이다.
이 CPU 내부에는 실제 연산을 담당하는 ALU라는 블록이 있다.
ALU가 처리하는 기본적인 연산은 크게 두 가지로 나뉜다. 하나는 덧셈이나 뺄셈과 같은 산술 연산이고, 나머지 하나는 AND나 OR같은 논리 연산이다.

컨트롤 유닛(Control Unit)

컨트롤 유닛이 하는 일은 CPU가 처리해야 할 명령어들을 해석하는 것이다.
예를 들어 32비트 명령어가 CPU 내부로 전송되었다면 아래와 같이 구성될 것이다.
"10011010 00011010 10011110 10010011"
ALU는 이 명령을 이해할 수 없다. 산술 연산과 논리 연산만 할 줄 아는 ALU는 그만큼 단순하다. ALU를 대신해서 이 명령어를 해석 해
주는 것이 바로 컨트롤 유닛이다.

이처럼 컨트롤 유닛은 명령어를 해석하고, 그 해석된 결과에 따라 적절한 신호를 CPU의 다른 블록에 보내는 일을 한다.


레지스터(Register)

레지스터란 CPU 내부에 존재하는 2진 데이터(Binary Data) 저장을 위한 저장장치이다.
CPU 내부에서 임시적으로 데이터를 저장하기 위한 조그마한 메모리 공간으로 활용된다.
이러한 레지스터들은 CPU 내부에 여러 개가 존재하는데 각각의 용도가 정해져 있다.


버스 인터페이스(Bus Interface)

컴퓨터 내부에는 CPU, 하드디스크, RAM, 사운드 카드, 그래픽 카드 등이 존재한다. 이들은 서로 데이터를 주고 받으면서 동작하는데,
데이터를 주고 받기 위한 매개체가 바로 I/O 버스이다.
그런데, I/O 버스의 통신방식을 이해하지 못하면 데이터를 주고 받을 수 없다. 즉, CPU 내에는 I/O 버스의 통신방식을 이해하고 있는
장치가 필요하다.이 역할을 해주는 것이 바로 '버스 인터페이스'이다.
 
출처: http://rusy.tistory.com/12

 

공유하기 버튼

 
 

1. 개발환경 셋업 Android lecture


안녕하세요. 첫번째 시간이네요.
오늘은 간단히 개발환경 셋업과 강좌 차례 정도 살펴볼까 합니다.

말씀드렸다시피, 강좌는 http://developer.android.com 를 중심으로 해서 진행합니다.
위 사이트의 SDK 탭(http://developer.android.com/sdk/index.html) 에 들어가, 왼쪽 메뉴에 보시면 Download와 Installing the SDK 항목이 있는데, 이 부분이 개발환경 셋업에 대한 내용이 나옵니다.

안드로이드 개발 환경 셋업 순서는 아래와 같습니다.

1. JDK
2. Android SDK
3. Eclipse
4. ADT (Android Development Tool) Plugin
5. (* Add Android platforms and other components to your SDK)
5. AVD (Android Virtual Device)

위 순서대로 설치는 하시면 됩니다. (참고로 저는 Windows 에서 개발하는것을 가정으로 했습니다.) , 각각에 대해 조금더 부연 설명을 드리면.

1. 차후 나오겠지만, 안드로이는 Linux 커널 위에 Java VM(Dalvik) 과 Framework, Core Library 등이 올려져 있고, 그 위에서 어플을 개발하게 됩니다. (물론, C,C++로 개발하는 특별한 방법도 있습니다. 이것도 차후에) 
따라서 Java를 사용하고, 당연히 컴파일 하려면 JDK가 있어야 겠죠?

2. 다음은 가장 중요한 Android SDK 설치 인데,  Android SDK 구조를 자세히 살펴 보는것도 필요합니다. 
Installing the SDK  부분에 보면, SDK에 대해 나와 있으니 참고하시면 되겠습니다.
platforms 디렉토리에 보면, 각 platform 버젼별로 (안드로이드 버젼) 라이브러리(Application Framework Library, Core Library) 들이 있습니다.
android.jar 보시면, android.* 비록, java.* 패키지등이 들어 있고, 바로 이 라이브러리를 이용해서 어플리케이션을 개발하게 됩니다.

3. Eclipse는 안드로이드 통합 개발환경이므로 설치해야 되는데, 이거 없이 SDK와 메모장만 있어도 개발은 가능하다고 합니다. 그런데 이렇게 하실분 있을까요?

4. 이건 안드로이드 개발에 필요한 Eclipse Plugin 입니다. 설치하시면 Window 밑에 Android SDK Manager, AVD Manager 가 생성되 있고, Preference에 android 항목이 생깁니다.
그외 Project Wizard에서도 Android 프로젝트 wizard가 포함되구요. 

5. AVD 는 말 그대로 안드로이드 가상 디바이스인데, 한마디로 애뮬레이터입니다. 만든 어플을 실제 단말에 올리지 않고도, PC 상에서 돌아가는 가상 안드로이드 단말에 올려 실행해 볼수 있습니다.

이상 간단한 설명이었고, 설치나 설정은 크게 어려운점은 없으니, 사이트 참고하셔서 설치 하시면 되겠습니다. 

그럼, 마지막으로 강좌 순서에 대해서 설명 드립니다.
SDK 탭에 Next Step 이라고 되어 있는 부분 위주로 따라가고자 합니다.

1. Wiat is Android? : 안드로이드 자체에 대한 전반적인 설명
2. Hello World : 첫 안드로이드 어플 만들기
3. Explore the development tools : 개발 툴들, 개발 방법에 대한 소개
4. Learn about Android : 본격적인 Android 주요 개념들 및 API 학습, Dev Guid에 있는 내용들로 대부분의 강좌 내용을 차지
5. Explore some code : Notepad tutorial 및 SDK 안의 예제 문서들 Review

추가로, 아래는 참고할만한 커뮤니티 사이트입니다.

http://www.kandroid.org
http://www.androidpub.com/
http://source.android.com

이번은 주로 개발 환경 설치부분이라 내용은 간단하지만,  제대로 설치 하는것도 중요합니다.
Eclipse 의 글자색, 바탕색 색상이나 폰트 같은 항목을 비롯해서, 자신의 편이에 맞게 다 셋팅하려면 시간이 꽤 걸리겠죠?

이번은 설치 부분이라 별로 재미(?) 없었지만, 다음 회부터 본격적으로 안드로이드에 대해서 알아보는 재밌는 시간이 될것 같습니다.
이만 마칩니다.

공유하기 버튼

 
 

개요 Android lecture















안녕하세요? 

안드로이드 개발 강좌를 시작하고자 합니다.
사실을 말하자면, 강좌라기보다, 제가 배우기 위한 목적으로 시작합니다.
(저도 현재로서는 안드로이드에 대해 모릅니다.)

물론, 저혼자 공부하는 목적이라면 굳이 블로그에 올리지는 않겠죠?
부족하지만 도움이 될 수 있도록 하겠고, 같이 배우는 계기가 되었으면 합니다.

교재는 무엇을 할까 고민했습니다. 시중에 수많은 책들이 나와 있는걸로 아는데, 웹상에 이미 잘 정리된 교재가 있었습니다. 
바로 http://developer.android.com 입니다. 
불행히 영어지만...뭐 크게 어려워보이지 않고, 개발자인데 이정도는 가볍게(?) 읽어줘야 하지 않을까 해서^ 선택했습니다.
물론, 그렇다고 정말 제가 가볍게 읽는것은 아닙니다. 소위 '직독직해' 가 되면 참 좋겠는데, 읽은것 다시 되돌아 가는 때가 많은..뭐 그런 실력입니다. 영어 공부도 해야 되는데...아, 개발자는 왜 이렇게 배워야 할께 많은거죠? ㅜ.ㅜ

본론으로 돌아와,
강좌는 주로 이 사이트 내용을 정리하는 방향으로 가되, 경우에 따라 여러 Reference도 참고하려 합니다.

기본적으로 필요한 배경지식이라고 하면, Java 문법에 대해 어느정도 알고 있으면 따라갈수 있어 보입니다.
저는 물론 현재 개발자 이지만, Java는 문법만 대략적으로 아는 상태입니다.

마지막으로,
그런데, Android를 왜 배워야 할까요? 여러분들은 왜 Android를 배우고자 하시나요?
동기와 목적이 있어야, 어떤 일이든 끝까지 할수 있잖아요?
여러분들 각자의 목적과  생각이 있을 것이고 듣고 싶지만, 저는 카카오톡같은 세상이 깜짝 놀랄만한 앱을 만들어서, 놀래켜 주겠다 하는 큰 목표와 강력한 동기!!....같은 거 솔직히 없습니다.ㅡ.ㅡ;;
안드로이드가 대세니까.. 개발자로서 이런 신기술들을 모른척 하면 뒤떨어질수 있다는 압박감... 거기다 뭐 제 갤S2 에 필요한 앱을 직접 만들어 사용하면 좋겠다 하는 정도 입니다. 
생각해보니, 꿈이라도 정말 그런 앱 하나 만들겠다는 같은 큰 목표같은거 하나를 다시 갖어야 겠다는 다짐이 드네요.
여러분도 이런 한가지 목표를 갖고 시작하시면 어떨까요?

개요가 길어졌는데, 이제 그만 줄여야 겠습니다.

다음회에는 전체적인 강좌내용 순서 개략, 개발환경 셋팅 정도 소개할까 합니다.
그럼. see you next lecture~ (영어가 맞나? 불안해..)


공유하기 버튼

 
 

수직적 사고와 수평적 사고

[ 출처: http://blog.daum.net/it-trend/14199417 ]

수직적사고방식과 수평적사고방식에 대해서는 적잖이 들어왔습니다. 그런데 그 용어의 정의와 차이점을 말해보라고하면 선뜻 명쾌한 대답을 할수없는 이유는 무엇일까요?
 
저의 생각인데...그것은 아마도 우리가 너무 오랜세월, 아주 오래전 조상들로부터 대대손손, 수직적사고방식이 우리의 문화로 잡리잡고 일상 생활화되어 자연스럽게 몸에 베어있는지라 그것이 그것인지 잘 인식하지 못하고 있는것은 아닌가 생각해봅니다.
 
좀더 쉽고 명확한 이해를 위해 수직적사고방식의 폐해를 사례로들어 한번 말씀드려볼까 합니다.
 
1997년8월 대한항공 801편이 괌에서 추락하는 사고가 발생하였습니다. 그 사고로 228명이 사망하였습니다.

  

 

당시 사고원인으로 우리는 악천후(惡天候)와 더불어 기장이 과도한 비행으로 피로가 누적되어 상황판단을 잘못했다는 뉴스를 들었고  나중에는 기체결함에대한 의문도 제기 되었었는데요  미국교통안전위원회에서 블랙박스를 해독하여 기장과 부기장의 대화를 분석하여 내린 사고의 실마리중 하나는 엉뚱하게도 기장과 부기장의 권위격차에따른 위기상황전달과정에 심각한 문제가 있었으며 그것이 사고의 적잖은 영향을 주었다는 결론을 내렸다는 군요.
 
즉, 부기장이 기장의 잘못된 판단을 알고있으면서도 위험성을 강하게 어필하지 못하여 위험을 벗어나지 못했다는 것입니다.
 
이 사건이후 미국 교통안전위원회에서 각국의 항공사들을 대상으로 기장과 부기장의 권력거리지수(PDI : Power Distance Index - 부하가 상사의 의견에 의존하는 정도)를 조사해보니 한국이 브라질에 이어 2위였다는군요. 조사대상국들중 최하위(부하직원이 어떤 결정을 내릴때 상사의견에 의존하는 정도가 가장 낮다)는 미국이었답니다.

나중에 대한항공은 이런 문제를 미연에 방지하기위해 운항도중 기장과 부기장은 반드시 영어로 대화를 하도록 하였다고하며  그래서인지 최근 조사에의하면  대한항공은 세계항공사들중 사고율이 가장 낮은 최고의 수준의 항공사가 되었다고 합니다.
 
 
이것이 어찌 항공사의 기장과 부기장에게만 적용되는 문제겠습니까. 사실 이 수직적사고방식은 우리나라 사회곳곳은 물론이고 우리모두의 생활방식에까지 깊숙히 자리잡고 있어 오히려 수평적사고방식이 오만불손하다든지 버릇이 없다든지 문화를 이해하지 못한다하여 제재를 받고 따돌림을 받는 것이 현실입니다.
 
이런 분위기가 가장 심한곳 중 한군데가 바로 우리나라 기업입니다.
가끔 대기업의 회장들이 공식석상에서 계열사 사장들에게 했다는 말을 메스컴에서 보면 정말 코미디같지 않습니까? 일선에서 물러나 쉬어야할  노인네가 그 분야의 최고 권위자들에게 제품의 품질에 결정적 영향을 미칠수있는 매우 중요한 사항을 가르치는 모습...그것을 또 우리의 언론들은 아름다운 모습으로 미화하고 찬양합니다.
 
윗사람이 결정하고 아랫사람은 그 결정에 무조건따르는 문화. 그것이 지켜지지 않으면 우리는 '하극상'이라고 합니다. 얼마전 어느 취업포탈의 조사에따르면 직장인들이 하극상으로 가장많이 꼽는 사례가 바로 '윗사람의 지시사항을 아랫사람이 그대로 수행하지 않는 경우'라고 했다지요. 그것을 다른 의견으로 받아들이는 것이 아니라 반발도 받아들이는 것이죠.
 
 
국내 스마트폰 업체들과 언론사들이 똘똘뭉쳐 국내스마트폰이 아이폰보다 우수하다고 아무리 여론몰이를 해도 많은 이용자들은  궁극적으로 우라나라 스마트폰이 외국의 스마트폰을 이기지 못할것이라고 생각하고 있는 이유가 바로 이 수직적사고방식에의해 만들어지는 스마트폰의 기능적 한계를 우려하기 때문입니다.

정말 좋은 스마트폰을 만들려면 부품과 소트웨어를 개발하는 개발업체 또는 개발자들을 같은 선상에 있는 동등한 사업파트너로 인식해야 하는데 그것이 아니라 필요하면 언제든 선택할수있고 바꿔칠수있는 하잘것없는 보조적인 존재들로 인식하고 있기때문에 창의적인 최고의 제품이 나오기 힘들다는 겁니다.
 
솔직히 말씀드리면, 저또한 수직적사고방식에서 벗어나지 못하고 있고, 그것이 정말 쉽지 않다는 것을 매번 절절히 느낍니다.
 
수직적사고방식.
 
그것은 아주 어렸을때부터 가족으로부터 학교로부터 직장으로부터 일상 생활로부터 너무나도 자연스럽게 자랑스러운 우리의 고유한 문화로 채득되어 몸에 베어있어 지속적으로 신경쓰고 노력하지 않으면 개선되기 힘든것 같습니다.
 
우리가 살아가는 21세기는  네트워크시대와 와 융합의 시대로 정의됩니다.
 
이런시대를 살아가는 우리가 글로벌 기업과 경쟁하기위해서 수직적사고방식은 반드시 극복해야 할 또하나의 과제입니다.
 
아랫사람이 대든다고 무조건 깔아뭉개지만 말고 이성적으로 냉정하게 문제를 해결하려는 노력을 조금씩 조금씩이라도 해 나갑시다.
 
이 한장의 사진에서 저는 오바마의 사고방식과 내면을 쉽게 추측해볼수 있을것 같습니다.

 


개인적 생각.

수평적 사고 방식, 수평적인 기업 문화의 중요성에 대해 다시 생각해 보게 된다. 직급,나이에 얽매이기보다, 각 개인의 생각과 의견을 쉽게 이야기 할수 있고, 이를 존중해 주는 문화가 이젠 정말 필요해 보인다. 수직적인 문화. 한 개인이 좋은 아이디어, 창의적인 아이디어가 있어도 이런 곳에서는 말할 기회조차 잃고, 아니 말할 의욕이 나지를 않는다. 기업이나 조직에서 이건 분명 큰 손실일텐데. 물론 수직적 문화가 필요한 곳도 있다는 것, 논리를 축으로 해서 이어가는 수직적 사고방식과 직관과 연상작용으로 이루어지는 수평적 사고방식 모두가 균형잡히게 필요하고, 이런 T자형 인간이 필요하다는 글도 어디서 본것 같고 맞는 말이다.
어쨋든, 경직된 사고방식과 문화가 많은 이 시대에 좀더 자유롭고 수평적인 사고와 문화가 분명 필요해 보인다.



공유하기 버튼

 
 

1 2