최근 데이터 분석, 머신러닝, 딥러닝까지 연구가 활발히 진행이 되어지고 이에 빠질 수 없는 언어는 파이썬입니다.
따라서, 본격적인 딥러닝 공부를 하기 전에 있어서 파이썬에 대한 기초적인 이론을 공부하고 정리한 내용을 정리해 보았습니다.
OS(Operating System)
각각의 파일들은 각각의 OS에서만 작동 될 수 있는 파일들이 존재한다
결론
파일 시스템(File System)
디렉토리
파일
컴퓨터에서 정보를 저장하는 논리적 단위
파일명 + 확장자 구조 ex) test.py
실행,쓰기, 읽기등 각각의 파일들에는 권한이 존재
파일 권한은 읽기, 쓰기, 실행의 권한으로 나뉘어져 있다
접근 권한은 사용자 카테고리 별로 나뉘어져 있으며 표기 상태는 다음과 같다.
접근 권한 변경 명령어는 chmod를 사용하며 파일의 소유자나 시스템 관리자는 접근 권한을 바꿀 수 있다. 일반 사용자는 소유자 자신의 접근 뿐만 아니라 그룹과 기타 사용자의 권한도 변경가능하나 다른 사용자가 소유한 파일의 접근 권한은 손댈 수 없다.(기호모드 - 접근 권한을 변경하기 위해 문자와 기호를 사용하여 권한을 표시, 숫자모드 - 접근 권한을 변경하기 위해 숫자를 사용)
파일 경로
운영체제 컨트롤 방법
터미널의 기본 명령어
각 터미널에는 프로그램 작동하는 shell이 존재 → 명령어는 shell을 통과하여 기계어로 만들어지고 core로 전달하여 작동이 되어짐
shell의 종류: powershell, CMD창, bash창, zsh창
각각의 명령어 종류
윈도우 - CD, shell - cd / 디렉터리 변경
윈도우 - CLS, shell -clear / 콘솔 화면에 있는 모든 명령어들을 지워줌
윈도우 - mkdir, shell - mkdir / 디렉터리 생성
윈도우 dir, shell - ls / 하위 목록 조회
윈도우 - copy , shell - cp/ 파일 복사
윈도우 - DEL, shell- rm/ 파일 삭제
런타임에 크기가 결정이 됨
파이썬은 동적 할당의 기능이 존재하지 않음(메모리를 관리해주는 특별한 기능 존재 - Memory Manager)
Memory Manager
1, 포인터를 움직여 힙 영역의 메모리 할당 범위와 내부 버퍼 조정
2, Python/C API를 통하여 스토리지를 동적으로 관리
3, 동적 관리 필요 경우 - 공유(sharing), 메모리 세분화(segmentation), 메모리 사전할당(preallocation), 캐싱(caching)
4, 힙 안의 메모리 영역을 인터프리터가 포인터를 사용하여 영역의 범위를 조정, 인터프리터가 자동으로 메모리를 OS로 할당하지 않고 가지고 있다가 사용될 때 메모리를 재사용 하는 방식 → os과부화를 덜어줌
<파이썬 메모리 구조>
-1 : OS의 영역
+1 (가장 낮은 레벨): raw memory allocator가 운영체제와 소통하면서 heap 영역 안에 데이터가 들어가 자리가 있는지 확인
+3 (제일 높은 레벨) : Object-specific memory가 힙 영역을 담당하고 변수 타입에 따라 달라지는 저장방식 때문에 각각의 타입에 맞게 힙에 저장
결론
작동방식
소스코드를 기계어로 먼저 번역
해당 플랫폼에 최적화되어 프로그램 실행
장점
단점
주요언어
작동방식
장점
단점
주요언어
Python은 C구현(구현체는 CPython)
CPython은 인터프리터이자 컴파일러 → 작성된 python코드를 bytecode로 컴파일 하고 실행(C언어로 바꾸는 것이 아닌 컴파일 하여 bytecode로 바꾸고 그 다음 interpreter가 실행)
.py파일 → .pyc파일 생성(CPython이 컴파일 한 bytecode가 들어있음) → .pyc를 interpret하는 것도 CPython
CPython의 단점
GIL(Global interpreter lock) 사용
bytecode를 실행할 때에 여러 thread를 사용하는 경우 전체에 lock을 걸어서 한번에 단 하나의 thread만이 python object에 접근하도록 제한
단일 스레드 일시 문제가 없고 도완하기 위한 많은 방법들이 존재
RPython으로 컴파일된 인터프리터, C로 작성된 RPython 툴체인으로 인터프리터 소스에 JIT컴파일을 위한 힌트를 추가해 CPython보다 빠른 실행 속도를 가짐
python자체로 구현, JIT컴파일 도입하여 CPython보다 빠르다
JIT(Just - in - time)컴파일러
인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일 하여 네이티브 코드로 변경하고, 이 이후에는 해당 메서드를 더이산 인터프리팅하지 않고 네이티브 코드로 직접 실행하는 방식
RPython(Restricted Python)
실행 추적 JIT 컴파일을 C로 구현해 툴체인을 포함
RPython으로 인터프리터를 작성하고 툴체인으로 힌트를 추가하면 인터프리터에 실행추적 JIT컴파일러를 빌드(RPython은 PyPy 프로젝트팀이 만든 일종의 인터프리터 제작 프레임워크 언어, 표준 라이브러리와 문법에 제약을 가해 변수의 정적 컴파일이 가능하도록 RPython을 만들었으며, 동적 언어 인터프리터를 구현하는데 사용)
언어사양(파이썬 언어 규칙, BF 언어 규칙 등)과 구현(실제 인터프리터 제작)을 분리함으로써 어떤 동적 언어에 대해서라도 자동으로 JIT컴파일러 생성 가능하게 됨
Naver BoostCamp AI Tech - edwith 강의
https://cjh5414.github.io/about-python-and-how-python-works/
https://lgphone.tistory.com/m/128?category=913302
https://catch-me-java.tistory.com/11
https://has3ong.github.io/pypy-cpython/