4. 소프트웨어 이해하기
by 노실언니컴퓨터개론Course
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가지로 나누어 배웠으나 같은 결이라는 것을 느끼자!
a. SW↔HW[입출력장치-👩]
역할a:어떠한 장치(HW)로 App(SW)를 사용하더라도 문제없이 사용할 수 있도록 해줌
[하나의 S/W] 사용자가 특정 프로그램(S/W)에서 나오는 소리를 듣기 위해
[다양한 H/W] 어떠한 회사의 어떠한 장치(블루투스이어폰/헤드셋/스피커 등) 쓰더라도
[동일한 결과] 사용자는 특정 프로그램(S/W)에서 나오는 소리를 듣는다.
체체? 쓰앵님 오타나셨었네요, 이걸 한 달 후에 발견한 나도 레전드
b. Data↔HW[저장장치-📁]
역할b:상황과 목적을 고려하여, 어떤 저장장치의 어떤 영역(HW)에 무엇(Data)을 얼마만큼 저장할 것인가/불러올 것인가 판단
c. SW↔HW[처리장치-🤖] & Multitasking
역할c:어떤 일(SW, Data)을 얼마만큼 처리(HW)할 것인가 판단
해야할 일들을 잘게 쪼개고 번갈아가며 처리하면? → Multitasking! : 사람은 컴퓨터가 여러 앱을 동시에 구동하는 것처럼 느낌
② 종류4 #머신종류기준
a. DeskTop/LabTop
b. Mobile/Tab
c. Server
안정성/속도/보안 모두 챙겨가야하는 OS사용
d. Embedded
극적으로 안 빨라도 되니까, 절대적으로 안정적이어야 함→∴RTOS 정해진 시간블럭안에 딱! 딸칵!
③ 역사 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]
#제대로배우면머리터질것들뿐
'Computer science : 컴퓨터과학 > Student story at 혼긱' 카테고리의 다른 글
2. 프로그래밍 핵심개념 in Python (0) | 2021.04.19 |
---|---|
컴퓨터개론 Computer basics 총정리 (0) | 2021.04.06 |
3. 프로그래머의 세계 이해하기 (0) | 2021.03.23 |
2. 프로그래밍 언어 이해하기 (0) | 2021.03.22 |
1. 프로그래밍 시작하기 in Python (0) | 2021.03.17 |
블로그의 정보
노력하는 실버티어
노실언니