개발자 끄적끄적
시스템 프로그래밍 정리(2023.9.18) 본문
<컴퓨터>
CPU(중앙처리장치) : 연산, 제어장치
- 실제로 일을 한다 -> 계산(연산) 및 논리연산
- 일거리는 메모리(주기억장치)하고 communication
- Input/Output/Controll로 이루어져있다(0,1bit밖에 모른다)
주기억장치 : Main Memory(DRAM, Dynamic random-access memory : 동적막기억장치), Power가 off되면 다 날아감
보조기억장치 : Power off가 되도 여전히 남아있다
- 단위 : File
- ex) 'sys.c(보조기억장치)'이라는 파일을 만들 때 -> CPU가 못알아들음
- CPU가 알아듣게 바꿔야한다 -> 번역 -> sys.out(보조기억장치) -> sys.out(주기억장치)
*주기억장치에 있을 때 sys.out는 process라 부른다
*sys.c가 주기억장치에 올라갈 일은 없다
- 번역방법
1. Interpreter(파이썬, 자바스크립트, HTML)
2. Compiler(C언어, JAVA)
기억장치 : 주기억장치, 보조기억장치
표준입력장치 : 키보드, 그 외 나머지
- 타이핑을 하면 보조기억장치와 연결, Buffer memory(Enter치는 순간 보조기억장치로 넘어간다)
- 프린터(Spool)도 마찬가지
출력장치 : 화면
--------------------------------------------------------------------
<주기억장치> - 그림중요!
0G~4G
stack(스택) : 함수 call, 지역변수 - 가변영역
free area(빈공간) : 스택이나 힙과 같이 가변적인 메모리 할당을 위해 유지하고 있는 빈 메모리 영역 - 가변영역
heap(힙) : 동적 메모리 할당(malloc, free) - 가변영역
data(데이터) : 전역변수 - 고정영역
sys.out : code text - 고정영역
--------
Kernel
--------------------------------------------------------------------
bash : Bourne Again SHell - 리눅스의 기본 셸(shell)
리눅스 명령어
- sh
- bsh, ksh
- csh
PPID : Parent Process ID
PID
-> PPID가 메인메모리에 먼저 올라가있다(번호가 PID보다 더 작다)
ps -ef : 모든 process 정보
ps -ef|more : 중요한 process 정보
- enter : 한 화면
- space : 한 줄
*ef : every file
메인 메모리에서 제일 먼저 중요한 정보 PPID : 0번
- kthreadd
- /sbin/init splash
검색할 때 '이진트리', process는 '트리' 구조('트리'가 속도가 훨씬 빠르다)
$ps -ef | wc -l : 프로세스 전체 정보를 라인의 갯수를 찾아라(메인 메모리에 올라간 프로세스의 갯수 : 285(case by case))
--------------------------------------------------------------------
<Top 명령>
- cpu와 메모리를 가장 많이 쓴 것을 실시간으로 보여준다
- virtual memory : 메인메모리에서 보조기억장치에 잠시 내려가있는 프로세스 -> 메모리가 올라와있지는 않아도 process
- 현재 실행 중인 프로세스를 주기적으로 확인해 출력
<메모리와 스왑 상태 검색 : sysinfo>
int(출력) sysinfo(함수 이름) (struct sysinfo *(주소)info)
- info : 검색 결과를 리턴하는 sysinfo 구조체의 주소
C의 data type
1. primitive data type : int, double, char, void
2. 만들어서 사용가능 : struct(data type), union(bit단위로 제어가능)
<정수- 자연수, 0, 음의 정수>
auto*, register(변수를 cpu안에 할당), const, static(전역변수), extern(외부변수)
--------------------
signed*(사칙연산o), usigned(사칙연산x)
--------------------
short, long, long long
--------------------
int*
* : 생략가능(지역변수, 자동으로 메모리 할당 및 해제가능)
ex) unsigned num : 생략 - auto, unsigned int -> 자연수('+'에 닫혀있고, '-' 열려있다, '*' 닫혀있다, '/'열려있다)
ex) int num : 생략 - auto, unsigned, int -> 정수(+,-,*)
ex) double num : -> 실수(+,-,*,/)
*운영체제는 모두 C언어로 만들어져있다
--------------------------------------------------------------------
<&기호>
1. int &b = k; //레퍼런스(c++문법)
2. a=b&&C; //2항 연산자 AND
3. c=k&c //1항 연산자
--------------------------------------------------------------------
- 프로세스(Process) : 실행 중인 프로그램, 이미 메모리가 올라가있는 실행프로그램 -> binary가 주기억장치에 올라가있다
- ex) 작업관리자에 '프로세스'
- 프로세서(Processor) : 인텔 코어 등과 같은 중앙 처리 장치(CPU)를 의미
- 프로그램(Program) : 사용자가 컴퓨터에 작업을 시키기 위한 명령어의 집합