Process/Thread
CPU는 오직 Memory하고만 이야기할 수 있음
Process는 ID가 보임
Thread는 PS 안에서 돌아서 ID가 안보임
<Lifecycle (실행파일을 Process화 하는 과정)>
Create(외부 lib 할당, 가상메모리 끌어와서 )
Ready(CPU 할당받기 전 준비단계)
Run(CPU 할당)
Wait(CPU 뺐김)
Resume(CPU 다시 할당하면 다시 Ready 상태로 가서 기다림)
Destroy(할일 다 끝나면)
Memory에서 읽는 시간보다 File에서 읽는 시간이 훨씬 오래걸림 (달까지의 거리라고 생각)
Deadlock
만들어지는 조건 : 두개 이상의 task가 두개 이상의 resource를 공유할 때 만들어짐
(할당과 기다림이 사이클을 이룰 때)
뮤텍스 : 한 자원을 한번에 한 task만 사용하도록 만든 장치
(프로세스 버전은 세마포어)
쓰레드는 뮤텍스를 사용
- nodejs는 싱글쓰레드여서 데드락 걸릴일이 없지만 java와 python 등에서 나타날 수 있음
Resource
File
I/O
Memory
Memory Management
남는 메모리 공간을 compress(압축)해서 다른 메모리들을 reloaction해줌
그리고 연속된 공간을 확보한뒤 거기에 로드함
리로케이션은 아주 복잡한 기법이므로 자주 사용하지 않음
Virtual Memory
실제 메모리는 2G인데 4G 프로세스를 어떻게 사용하나?
필요한 부분만 그때 그때 메모리에 올려서 사용함
디스크 쓰는 작업은 엄청 비용이 큰데 또 스왑을 계속하니 비용이 정말 큼
Managed/Unmanaged Language
- Unmanaged Lang : malloc(), free()
- 사용할 부분만 동적으로 메모리를 할당해주고(malloc), 다쓰고 해제해줌(free)
- 메모리가 풀나면 Log도 안남기고 그냥 죽음
- Assembly, C, C++
- Managed : A garage Collected Manage Management
- Java, C#, Python, Javascript : 명시적으로 메모리 할당을 하지 않아도 자동으로 메모리를 잡아줌
- Java -> .class -> JVM
- (주기적으로 가비지 컬렉션을 컴프레션 해서 공간을 확보함.
- 컴프레션 할때는 안돌아가는게 단점)
- C# -> .Net에서 돌아감
- Python -> text.py를 파이썬에 올리면 바로 돌아감
- Jvascript는 V8엔진에서 돌아감
- 이것처럼 각 언어는 돌리는 엔진에서 사용되는 현황을 관리하고 있음
- Unmanaged Lang : malloc(), free()
Linux(Kernel)
Background
- 1bit -> 1진공관에 저장 => 트랜지스터 => IC => ...
- UNIX 만듬 : 작은 규모의 다중 사용자, 멀티 프로세싱 가능한 PDP(미니 컴퓨터) 만듬
- C 언어 + UNIX + Socket +.... => 버클리에서 UNIX System 1,2,3,4,5 (Unix System V시스템 파이브) => Posix(portable operating system interface : 이식 가능 운영 체제 인터페이스) API 정의
- 90년대 초반에 kernel 을 오픈함
- Kernel : Memory Management, CPU Scheduling, File System...
- 커널에서 프로그래밍 하려면 컴파일러, 편집기, 링커(라이브러리 링크), 로더(메모리에 올려서 프로세스화 하는 작업) 필요함.
- GNU : 주요한 소프트웨어를 Free SW 화 함. 대신 소스코드를 공개한다는 조건으로 오픈소스를 쓰게 함. ex : gnu 패키지 화 해서 만든게 우분투, 레드햇
Distribution, Package Management
- Linux 배포판 : Linux Kernel + Open Source S/W
- S/W를 배포하는 환경이 다름
- 미국 ) Red Hat -> rpm(Redhat Pakage Management)
- 커뮤니티 버전이 Cent OS(무료) -> rpm 사용 (서버 기능 특화)
- 유럽 ) 데비안 -> apt(패키지 관리자) (패키지 관리자가 다르다는 것은 패키지 운영방식이 다르다는 뜻)
- Ubuntu -> apt-get (데스크탑에서 주로 사용)
- Mac OS : 버클리 유닉스의 Darwin Kernel 사용
- Linux 배포판 : Linux Kernel + Open Source S/W
Embedded System
- IoT Device 가 대부분 Embedded System
- Embedded System :특수목적컴퓨터 (우리 컴퓨터는 General Purpose Computer)
- MCU( Micro Controller Unit) : CPU, RAM, Flash Memory
- Real-Time OS : task를 처리하는데 dead line이 주어진 시스템 (ex)미사일 좌표 처리
- Hard RT : 데드라인 엄격함
- Soft RT : 영상이나 음악을 들을 때, 영상과 소리의 싱크가 맞아야 되는 정도
'CS > Computer' 카테고리의 다른 글
Video call (feat.WebRTC) (0) | 2021.02.08 |
---|---|
Data In Digital (0) | 2019.05.17 |
프로그램에 관하여 (0) | 2019.05.14 |
DLL (Dynamic Link Library) (0) | 2019.05.07 |
RPA (Robotic Process Automation) (0) | 2019.04.24 |