꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

분류 전체보기 199

프로세스 관리 - 프로세스 종료

exit() 시스템 콜 exit() 시스템 콜은 인자로 status 정보를 넘겨줍니다. status란 프로세스 종료 상태 번호를 말합니다. 예로 0은 정상종료를 나타냅니다. 보통 비정상 종료를 할 때 exit() 시스템 콜을 사용합니다. 부모 프로세스는 status & 0377(비트 계산) 계산 값으로 자식 프로세스 종료 상태 확인이 가능합니다. return 0;과 exit(0)의 차이 exit() 함수는 즉시 프로세스를 종료합니다. 다음에 있는 코드는 실행되지 않습니다. 'return 0'은 단지 main()이라는 함수를 종료합니다. main()에서 return 시, C 언어 실행 파일에 기본으로 포함된 _start() 함수를 호출하게 됩니다. 해당 함수는 결국 exit() 함수를 호출합니다. exit..

프로세스 관리 - 프로세스 생성 속도 향상 (copy on write)

리눅스 프로세스는 각각의 프로세스마다 4GB 가상 메모리를 할당합니다. Kernel Space가 3GB~4GB로 잡히며, 이영역에 커널 이미지가 들어갑니다. 0GB~3GB는 User Space영역으로써 사용자 실행 이미지가 들어갑니다. text, data, heap, stack이 User Space 영역에 들어갑니다. 커널에 할당된 가상 메모리는 프로세스간 공유가 가능합니다. 위 아이디어를 갖고 copy on write에 대해서 알아보겠습니다. 각 프로세스마다 가상 메모리는 4GB입니다. fork() 시스템 콜을 호출하면 4GB를 복사하게 됩니다. 새로운 프로세스 공간을 생성한 후, 기존 프로세스 공간을 복사합니다. 결과적으로 프로세스 생성 시간이 오래걸립니다. 이를 줄이기 위한 방법으로 copy on ..

프로세스 관리 - 프로세스 생성

프로세스는 어떻게 생성할까요? 프로세스가 생성된다는 것은 text, data, bss, heap, stack 영역을 생성한다는 것입니다. 영역 별 공간을 만들고 프로세스 이미지를 해당 공간에 업로드하고, 실행을 시작하면서 생성이 됩니다. fork()와 exec() 시스템콜 fork() 시스템 콜은 새로운 프로세스 공간을 별도로 만들고, fork() 시스템콜을 호출한 프로세스(부모 프로세스) 공간을 모두 복사합니다. 별도의 프로세스 공간을 만들고, 부모 프로세스 공간의 데이터를 그대로 복사합니다. exec() 시스템 콜을 호출한 현재 프로세스 공간의 text, data, bss 영역을 새로운 프로세스의 이미지로 덮어씌웁니다. 별도의 프로세스 공간을 만들지 않습니다. fork() 시스템 콜 pid = for..

프로세스 관리 - 프로세스 ID

프로세스 ID는 pid로 각 프로세스는 해당 시점에 unique한 pid를 갖고 있습니다. pid 최댓값은 32768이며, 부호형 16비트 정수값을 사용합니다. 'sudo vi /proc/sys/kernel/pid_max'를 통해서 볼 수 있습니다. 리눅스의 경우 최근 할당된 pid가 200이라면, 그 이후에는 201, 202 등이 할당됩니다. 프로세스 계층 최초 프로세스는 운영체제가 생성합니다. 다른 프로세스는 또 다른 프로세스로부터 생성됩니다. 부모 프로세스와 자식 프로세스 관계를 갖습니다. ppid값이 부모 프로세스의 pid를 뜻합니다. 'ps -ef'를 통해서 ppid를 확인할 수 있습니다. 프로세스와 소유자(owner) 관리 리눅스 내부에서는 프로세스의 소유자와 그룹을 UID/GID로 관리합니다..

mssql 개인적으로 기억할 query

오늘 날짜 데이터 가져오기 INSERT INTO 테이블명 (컬럼명) SELECT 컬럼명 FROM 테이블명 WHERE (convert(varchar(8), CreatedDatetime, 112) = convert(varchar(8), getdate(), 112)); 최신 날짜로 데이터 가져오기 SELECT 컬럼명 FROM 테이블명 WHERE 날짜컬럼명 = (SELECT MAX(날짜컬럼명) FROM 테이블명); 중복 데이터 무시하고 테이블에 insert INSERT INTO 테이블명 컬럼명 SELECT 컬럼명 FROM 테이블명 as A WHERE 날짜컬럼명 = (SELECT MAX(날짜컬럼명) FROM 테이블명) AND NOT EXISTS (SELECT 컬럼명 FROM 테이블명 as B WHERE 조건문);..

DATABASE 2021.05.02

리눅스 운영체제 종류와 장점

Debian GNU : 데비안의 특징으로 패키지 설치 및 업그레이드가 단순합니다. 먼저 인스톨을 한 후 패키지 매니저인 APT 업데이트 방식을 이용하면 소프트웨어의 설치나 업데이트에서 다른 패키지와의 의존성 확인, 보안 관련 업데이트 등을 자동으로 설정 및 설치해줍니다. 안정성과 보안에 중점을 두어 다른 리눅스 배포판들의 기반으로 사용되고 있습니다. Ubuntu : 리눅스를 처음 접해도 설치가 간단하도록 배포를 합니다. 파티션을 설정하는 것만 신경쓰면 클릭 몇 번으로 설치가 가능합니다. Unity라는 독자적인 데스크톱 환경을 제공합니다. 별다른 설정이 필요없을 정도로 간결한 데스크탑 환경입니다. 국내에서도 많은 사용자가 있어 정보를 얻기 쉽습니다. 주로 개인용 데스크톱과 노트북에서 가장 인기있는 리눅스 ..

시스템콜, API, ABI, 표준

시스템 콜 구현 시스템콜은 eax 레지스터에 시스템 콜 번호를 넣고, ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣고, 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨줍니다. CPU는 사용자 모드를 커널 모드로 바꿉니다. IDT(Interrupt Descriptor Table)에서 0x80에 해당하는 주소를 찾아서 실행합니다. system_call() 함수에서 eax로부터 시스템 콜 번호를 찾아서, 해당 번호에 맞는 시스템 콜 함수로 이동합니다. 해당 시스템 콜 함수를 실행 후, 다시 커널 모드에서 사용자 모드로 변경하고, 다시 해당 프로세스 다음 코드를 진행합니다. API 응용 프로그램과 분리된 하위 호환 인터페이스입니다. 사용자가 사용하기 쉽게 인터페이스를 제공해줍니다. 실행파일과 분리..

쉘(shell) 사용법 - 리눅스 파일 시스템

cp 파일을 복사할 수 있는 명령어입니다. ex) cp -rf 디렉토리 안에 있는 서브 디렉토리들도 강제적으로 복사합니다. rm 파일을 삭제합니다. 하드링크: l(엘)n A B inode가 같은 파일을 복사해서 생성합니다. 물리적 공간을 아낄 수 있다는 장점이 있습니다. A를 삭제해도 B에 접근할 수 있습니다. 소프트(심볼릭) 링크: l(엘)n -s A B windows OS의 바로가기와 동일합니다. A를 삭제하면 B는 접근 불가가 됩니다. inode 값은 다르게 생성됩니다. 특수파일 디바이스를 가리키는 파일입니다. 1. 블록 디바이스(Block Device) : 저장매체와 같습니다. HDD, CD/DVD와 같이 블록 또는 섹터 등 정해진 단위로 데이터를 전송합니다. IO 송수신 속도가 높습니다. 2. ..

리눅스 파일 시스템

리눅스는 모든 것은 파일이라는 철학을 따릅니다. 모든 인터렉션은 파일을 읽고, 쓰는 것처럼 이루어져 있습니다. 마우스, 키보드와 같은 모든 디바이스 관련된 기술도 파일과 같이 다루어집니다. 모든 자원에 대한 추상화 인터페이스로 파일 인터페이스를 활용합니다. 또한 리눅스는 전역 네임스페이스를 사용한다고 공부했습니다. (ex. /media/floofy/geumyong/jpg.) 슈퍼블록, inode와 파일 슈퍼블록: 파일 시스템의 정보입니다. 파일: inode 고유값과 자료구조에 의해 주요 정보를 관리합니다. '파일이름:inode'로 파일이름은 inode 번호와 매칭됩니다. 파일 시스템에서는 inode를 기반으로 파일에 접근합니다. inode 기반 메타 데이터를 저장합니다. inode 기반 메타 데이터는 위..

쉘 사용법 - 리눅스 프로세스

바이너리란 코드 이미지라 불리기도 하며 실행 파일을 말합니다. 저장 매체에 저장돼 있는 파일을 바이너리라 합니다. 프로세스는 모든 코드가 메모리에 올라간 상태에서 CPU에서 한 줄 한 줄 실행 중인 프로그램을 말합니다. 리눅스는 기본적으로 다양한 프로세스가 실행됩니다. 여러 프로그램이 서로 유기적으로 각자의 일을 수행하면서 전체 시스템이 동작하도록 하는 모델입니다. foreground process / background process foreground process : 쉘(shell)에서 해당 프로세스 실행을 명령한 후, 해당 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못하는 프로세스입니다. background process: 사용자 입력과 상관없이 실행되는 프로세스입니다. 쉘(shell)에서..