Sister Nosilv story

4. 소프트웨어 이해하기

by 노실언니

컴퓨터개론Course

   📺컴퓨터개론📺

1. 프로그래밍  2. 프로그래밍 언어  3. 프로그래머의 세계

 

Topic 4. 소프트웨어 이해하기

프로그래밍의 세계를 제대로 이해하기 위해서는 보이지 않는 프로그램들에 대해서도 잘 이해해야 합니다. 그래야 프로그래머들이 어떤 일을 하고 있는지, 프로그래밍 시장이 어떻게 움직이고, 우리는 어떤 공부를 해야하는지 제대로 파악할 수 있겠죠?

이번 토픽에서는 이 세상에 어떤 프로그램들이 존재하는지 살펴보고 소프트웨어의 큰 그림을 이해해 봅시다.

 

⑴ Compiler/Interpreter

①역할 <프로그래밍코드→실행가능한 코드/실행>

과정1.   👩🏻‍💼Coding→영어, 숫자, 기호가 뒤섞인(=programming Language) 코드=기계가 즉시 실현불가

과정2.  ✔️program→2진수/16진수로 구성된(=Machine Language) 코드=기계가 실행가능한 프로그램

과정3.   🤖Machine→실행

  Compiler Interpreter
메커니즘 개발언어실행가능언어→[End user] 개발언어→[End user]한줄씩 실행
개발속도 relatively Slow
- 수정시 전체 재컴파일 필요
- 개발언어도 느린 편
relatively Fast😄
- 수정해도 한줄한줄 즉시실행
- 개발언어도 개발자에게 더 편한 언어
실행속도 relatively Fast😄 relatively Slow
파일용량 실행가능언어 (> 개발언어) 개발언어😄
보안 개발코드 유출×😄 개발코드 유출○
개발언어 relatively low-level language
C C++
relatively high-level language
Python Ruby

컴파일러와 인터프리터

* Assembler[Eng wiki]:어셈블리어→기계어

대부분의 중/고급 언어의 컴파일러에는 어셈블러가 병합되어 있다. 그러다보니 C의 경우도 C→기계어와 같이 가는 것이 아니라 C→어셈블리어→기계어 순으로 컴파일 할 수도 있다.

 

* Assembly language[나무위키]: 기계어와 1:1대응하는 Low-level language

사물인터넷(LoT) 수요의 증가로 점유율 급상승

C언어의 포인터와 CPU의 구조를 이해한 다음 학습할 것

CPU마다 어셈블러가 다르지만, CPU제조업체가 제공한다.

어셈블리어는 고급언어보다 더 극한의 수준으로 최적화가 가능하다.('닿을 수 있는 한계지점은 더 높다')

그렇지만, 내가 작성한 고수준언어를 컴파일러가 변환/최적화한 어셈블리어보다 내가 작성한 어셈블리어가 더 발적화일 수 있다.

컴파일러를 이길 자신이 있는 사람만 전공하자.

그런데, 어셈블리어로 컴파일러를 이겨보겠다고 덤비는 그 시간과 인건비를 감수하는 것보다 그냥 한 스펙 더 높은 하드웨어를 사는 게 수백 수천 수억배 싸게 먹힌다. 최적화가 절실할 경우에는 아예 전용 반도체/전용 머신을 만드는 게 싸다.소프트웨어로 아무리 빠르게 해 봐야 주문형 반도체의 퍼포먼스를 따라잡을 수는 없다.

임베디드 프로그래밍이 아닌 꽤 크고 복잡한 어플리케이션 프로그램에서 어셈블리어를 사용한다면, 고수준 언어들로 만들어 놓은 다음 퍼포먼스 툴로 병목이 일어나는 부분을 찾아 해당 코드만을 어셈블리어로 튜닝을 해 주는 것이다. 런타임의 95%를 차지하는 일부 핵심 코드만 최적화를 해주는 것이 핵심이다. 전부 어셈블리어로 만드는 건 일종의 바보짓이 될 수 있다.

* 웹 어셈블리도 있다!

 

 

⑵ 운영체제 Operating System

① 역할 <SW,Data↔HW>

3가지로 나누어 배웠으나 같은 결이라는 것을 느끼자!

OS : HW-SW사이의 중재자인, 그 자신도 SW

 

a. SW↔HW[입출력장치-👩]

역할a:어떠한 장치(HW)로 App(SW)를 사용하더라도 문제없이 사용할 수 있도록 해줌

[하나의 S/W] 사용자가 특정 프로그램(S/W)에서 나오는 소리를 듣기 위해

[다양한 H/W] 어떠한 회사의 어떠한 장치(블루투스이어폰/헤드셋/스피커 등) 쓰더라도

[동일한 결과] 사용자는 특정 프로그램(S/W)에서 나오는 소리를 듣는다.

사용자가 같은 종류의 다른 회사의 장치(HW)를 쓰더라도, 문제없이 SW를 사용할 수 있도록 함 

체체? 쓰앵님 오타나셨었네요, 이걸 한 달 후에 발견한 나도 레전드

 

b. Data↔HW[저장장치-📁]

역할b:상황과 목적을 고려하여, 어떤 저장장치의 어떤 영역(HW)에 무엇(Data)을 얼마만큼 저장할 것인가/불러올 것인가 판단

어떤 저장장치의 어떤 영역(HW)에 무엇(Data)을 얼마만큼 저장할 것인가/불러올 것인가 판단

*저장장치?

 

c. SW↔HW[처리장치-🤖] & Multitasking

역할c:어떤 일(SW, Data)을 얼마만큼 처리(HW)할 것인가 판단

해야할 일들을 잘게 쪼개고 번갈아가며 처리하면? → Multitasking! : 사람은 컴퓨터가 여러 앱을 동시에 구동하는 것처럼 느낌

Multitasking

 

② 종류4 #머신종류기준

1. 기기별 구분  2. Flexible&보안으로 구분

a. DeskTop/LabTop

1. 데스크톱/랩톱의 OS : Windows maxOS Linux ChromeOS

 

b. Mobile/Tab

2. 모바일(폰/탭/워치)의 OS : Android iOS

 

c. Server

안정성/속도/보안 모두 챙겨가야하는 OS사용

3. 서버의 OS : Ubuntu Unix ContOS Debian Linux

 

d. Embedded

극적으로 안 빨라도 되니까, 절대적으로 안정적이어야 함→∴RTOS 정해진 시간블럭안에 딱! 딸칵!

4. 임베디드의 OS : VxWorks RT-Linux ⋯ 多

 

③ 역사 Unix→Linux

a. Unix

a-1. 1973년 Dennis Ritchie-UNIX탄생

a-2. Unix 공식버전OS들이 생겨남 :Unix코드사용+POSIX[표준] 만족+비용들여 검증+상표사용료지불→공식Unix

a-3. 1977년 Unix코드를 사용한 Bill Joy-BSD 탄생→ 사용료지불없이 사용하여 소송에 휘말림

 

b. GNU project

b-1. 1983년 Richard Stallman [나무][위키]-GNU project시작

  사용/수정&재배포/판매의 자유[사용자의 권리] + 소스코드 공개[사용자의 의무]

  위 생각과 부합하는 OS인 GNU를 제작하고자 함 → GNU project

  GNU = "GNU is Not Unix" [공홈][위키]

b-2. GNU에 사용될 Kernel(핵심부)개발이 늦어짐

 

c. Linux Kernel

c. 1991년 Linus Torvalds-Linux Kernel배포

 대학교 2학년 시절 OS수업을 듣다가 심심해서 Just for Fun으로 Linux Kernel을 만들었다고 함 ...예? 

 모르면 큰일난다는 Git도 만들었다고 함...

*덕질할만한 사람이 생김

 

d. OS탄생-Linux? GNU/Linux?

d-1. 1992년 GNU Utility + Linux Kernel → OS 탄생

d-2. After~ 활발한 성장→컴퓨터OS제외하고,지배적

 Unix코드 절대사용안함+POSIX표준은 준수하는 OS = BSD 대체 OS로써 성장

 GNU is an OS which is 100% free software. * Free = Liberty (not Free charge)

 Technically, GNU is generally like-Unix.

 But unlike Unix, GNU gives its users freedom.

 Unix 아니고 유사유닉스(Unix-like)

 

 * OS명칭논쟁 : GNU/Linux(Richard Stallman) VS Linux(Linus Torvalds)

- GNU/Linux : 리누스가 만든 것은 리눅스 커널 뿐이며, OS의 구성물 대다수는 자유 소프트웨어 재단 하에서 만들어진 소프트웨어로 채워져 있다. 커널이 OS의 핵심이기는 하지만 분량은 극히 일부일 뿐이다.

- Linux : Linux Kernel을 GNU프로젝트인 것처럼 포장하는 GNU/Linux 싫음

- 내 생각? 모름 :

 리누스는 Linux Kernel을 누구나 읽고 기여할 수 있도록 배포했다.

 Kernel이 필요했던 GNU는 Linux Kernel을 사용하여 새로운 OS를 만들었다.

 그것을 계기로 Linux Kernel과 GNU software이 합쳐진 OS가 폭발적으로 성장하였다.

 이 때의 OS들을 Linux라 불러야할지, GNU/Linux라고 불러야할지?

 나도 모름...만든 사람들도 싸우는데ㅠㅠ

 

⑶ Native/Web APP

① Application

End user가 직접 사용하는 응용프로그램

② App개발의 문제점과 해결책

-문제점 : 플랫폼의존성→플랫폼파편화

[플랫폼?] App의 플랫폼은 OS(+HW)이다.

[플랫폼의존성] App은 OS/HW에 호환되도록 코딩해야한다.

[플랫폼파편화] 그 OS/HW가 너무 다양해져서, App개발이 번거로워졌다.

-해결책 : 크로스플랫폼(가상머신or웹브라우저)

[쿠션생성]HW-OS-App사이에 한 겹의 플랫폼을 더 끼움→HW-OS-Cross Platform-App

[OS-Cross Platform] 플랫폼의존성이 존재하여 호환성에 신경써줘야함

[Cross Platform-App] App은 HW/OS의 영향력에서 벗어나, Cross Platform이 정한 "표준"만 지켜주면 됨

*주의:App이 Cross Platform에는 의존함 = Cross Platform의 표준이 다른 경우는 신경써야함

크로스플랫폼 - 가상머신
크로스플랫폼 - 브라우저

③ Native VS Web App

  Native App Web App
HW/OS활용 수월😄 제한적
사용자접근성 마켓설치필요 주소로 접근😄
인터넷 없어도 됨😄
수정시 마켓재배포 실시간반영😄

④ Web App 활용법

a. Single-page

b. Hybrid

c. Progressive

 

[Keyword]

#컴파일러통째번역 #인터프리터한줄실행

#OS역할,종류,역사 #App문제&활용

Program1. Compiler(통째번역) & Interpreter(한줄실행)

Program2. OS

  • 역할: SW&Data⇄HW(입출력,저장,처리장치)
  • 역사: Unix → Linux
  • 종류① DeskTop/LabTop → Window macOS Linux
  • 종류② Mobile/Tab → Android iOS
  • 종류③ Server → 안정/속도/효율★ Ubuntu Unix CentOS
  • 종류④ Embedded → 안정성★(> 속도) VxWorks RT-Linux

Program3. Native/Web App

  • 플랫폼파편화😰→😄<표준>크로스플랫폼:JVM(Java)&Browser(JS)
  • Native:기기활용○ 마켓必 VS Web:인터넷必
  • Web 활용:Single-page, Hybrid, Progressive

*Progressive:진보적인

 

[Remark]

#제대로배우면머리터질것들뿐

 

반응형

블로그의 정보

노력하는 실버티어

노실언니

활동하기