위 그림과 같이, 프로그램이 실행되기 위해서는 운영체제(OS)가 프로그램의 정보를 메모리에 로드 해야 한다.

또한 프로그램이 실행되는 동안 CPU가 코드를 처리하기 위해서는, 메모리가 명령어와 데이터들을 저장해야 한다.

 

메모리 구조

프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 합니다.

또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요합니다.

따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있습니다.

프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 4가지 있습니다.

  1. 코드(code) 영역
  2. 데이터(data) 영역
  3. 스택(stack) 영역
  4. 힙(heap) 영역

코드(code) 영역

메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부릅니다.

CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.

데이터(data) 영역

메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역입니다.

데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸합니다.

스택(stack) 영역

메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다.

스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.

이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다.

스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출합니다.

이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출됩니다.

스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.

힙(heap) 영역

메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 ‘그리고 해야만 하는’ 메모리 영역입니다.

힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.

힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.

스택과 힙의 장단점

스택

매우 빠른 액세스

변수를 명시 적으로 할당 해제 할 필요가 없습니다.

공간은 CPU에 의해 효율적으로 관리되고 메모리는 단편화되지 않습니다.

지역 변수 만

스택 크기 제한 (OS에 따라 다름)

변수의 크기를 조정할 수 없습니다.

변수는 전역 적으로 액세스 할 수 있습니다.

메모리 크기 제한 없음

(상대적으로) 느린 액세스

효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당 된 후 시간이 지남에 따라 메모리가 조각화되어 해제 될 수 있습니다.

메모리를 관리해야합니다 (변수를 할당하고 해제하는 책임이 있습니다)

변수는 C언어 realloc() or 자바 new

 

원문 : https://junghyun100.github.io/힙-스택차이점/

 

'이것저것' 카테고리의 다른 글

curl  (0) 2022.01.18
Windows Powershell 항상 admin으로 실행하기  (0) 2022.01.02
전처리기  (0) 2021.12.31
apt vs apt-get 차이  (2) 2021.12.28
작업스케쥴러에 프로그램 등록후 자동시작이 안되는 문제  (0) 2021.12.17

#if, #endif는 전처리기 과정을 거치면 코드는 다음과 같이 바뀝니다.

 

gcc 컴파일 옵션

 

 

make 와 makefile의 관계 :

https://bowbowbow.tistory.com/12

 

 

 

 

'apt' 명령을 APT(Advanced Package Tool)는  동일하지 않습니다.

apt & apt-get 명령에 대해 논의하기 전에 APT가 무엇인지 봅시다.

 

APT란

APT(Advanced Package Tool)는 데비안의 패키징 시스템을 관리하는 도구 모음입니다.
"libapt-pkg" 및 "libapt-inst"와 같은 핵심 라이브러리와 함께 작동하여 Debian, Ubuntu 패키지 관리 프로세스를 단순화합니다.
apt, apt-get, apt-cache, apt-config 및 aptitude(GUI)와 같은 명령줄 도구는 APT와 상호 작용하여 설치, 업데이트 및 삭제와 같은 다양한 패키지 기능을 수행합니다

 

apt 명령어

apt는 Ubuntu, Debian 및 파생 제품에서 deb 패키지를 설치, 업데이트 및 제거하기 위한 명령줄 유틸리티입니다. apt-get 및 apt-cache에서 가장 일반적으로 사용되는 명령을 합쳤습니다.

apt 명령은 최종 사용자에게 적합하며 apt-get 명령의 일부 기능을 포함하지 않습니다. apt는 apt-get의 결함 중 일부를 수정하여 설계되었습니다.

 

apt-get 명령어란?

apt-get은 데비안 기반 시스템에서 널리 사용되는 CLI 패키지 관리 도구입니다. apt-get 명령을 사용하면 패키지를 설치, 업데이트 및 제거를 할 수 있으며 apt-cache 명령은 새 패키지를 검색하는 데 사용됩니다.
apt-get은 하위 호환성이 있는 APT 패키지 시스템을 위한 저수준 프론트 엔드 도구입니다.

apt-get 명령어의 불편한 점은?

패키지 관리를 위해 여러 다른 apt-get 명령어가 사용됩니다. 이것이 apt-get의 비효율성과 기능 부족 때문입니다.

  • apt-get – 패키지 설치, 업데이트 및 제거
  • apt-cache – 패키지 조회
  • dpkg – 시스템에 설치된 패키지 조회

apt 명령은 이러한 모든 기능을 단일 명령으로 결합하여 APT 패키지 관리자와의 상호 작용을 용이하게 합니다.

 

apt 와 apt-get 차이점은?

  • apt는 보기좋은 진행률 표시
  • apt는 업그레이드해야 하는 패키지 목록 나열
  • apt는 apt-get, apt-cache 및 dpkg -l의 기능 결합
  • apt 및 apt-get 명령의 구문 비교
  • 새로운 명령어

1) 진행률바

apt 명령으로 패키지를 설치하거나 제거할 때 진행률 표시줄이 표시됩니다. 현재 프로세스의 진행을 백분율로 보여줍니다.

$ apt install mariadb-server

2) 업그레이드해야 하는 패키지 목록 표시

아래 출력은 리포지토리 데이터베이스를 업데이트하는 동안 업그레이드할 수 있는 패키지 수를 보여줍니다.

udpate할 것이 없으면 "All packages are up to date" 라는 메시지를 보여줍니다.

 

패키지 목록 및 기타 정보는 아래에 언급된 대로 apt list --upgradable 명령을 실행하여 볼 수 있습니다.

 

3) apt는 apt-get, apt-cache 및 dpkg -l의 기능 결합

Ubuntu 16.04 이전에는 사용자가 일반적으로 apt-get 및 apt-cache를 통해 패키지 작업을 했습니다. 
apt 명령어가 apt-get & apt-cache의 기능과 필수 명령어를  통합했기 때문에 apt를 사용하는 것이 효율적입니다.

 

아래는 서버에 설치된 maraidb 관련 패키지 목록을 조회하는 명령어입니다. apt-get으로는 할 수 없고 dpkg 명령어를 수행해야 합니다. 그러나 apt 명령어는 설치된 패키지 목록 조회가 가능합니다.

$ dpkg -l | grep mariadb
ii  mariadb-client-10.3                        1:10.3.32-0ubuntu0.20.04.1            amd64        MariaDB database client binaries
ii  mariadb-client-core-10.3                   1:10.3.32-0ubuntu0.20.04.1            amd64        MariaDB database core client binaries
ii  mariadb-common                             1:10.3.32-0ubuntu0.20.04.1            all          MariaDB common metapackage
ii  mariadb-server                             1:10.3.32-0ubuntu0.20.04.1            all          MariaDB database server (metapackage depending on the latest version)
ii  mariadb-server-10.3                        1:10.3.32-0ubuntu0.20.04.1            amd64        MariaDB database server binaries
ii  mariadb-server-core-10.3                   1:10.3.32-0ubuntu0.20.04.1            amd64        MariaDB database core server files

$ apt list --installed | grep mariadb
mariadb-client-10.3/focal-updates,focal-security,now 1:10.3.32-0ubuntu0.20.04.1 amd64 [installed,automatic]
mariadb-client-core-10.3/focal-updates,focal-security,now 1:10.3.32-0ubuntu0.20.04.1 amd64 [installed,automatic]
mariadb-common/focal-updates,focal-security,now 1:10.3.32-0ubuntu0.20.04.1 all [installed,automatic]
mariadb-server-10.3/focal-updates,focal-security,now 1:10.3.32-0ubuntu0.20.04.1 amd64 [installed,automatic]
mariadb-server-core-10.3/focal-updates,focal-security,now 1:10.3.32-0ubuntu0.20.04.1 amd64 [installed,automatic]
mariadb-server/focal-updates,focal-security,now 1:10.3.32-0ubuntu0.20.04.1 all [installed]

 

 

4) apt 및 apt-get 명령의 구문 비교

apt 명령은 일반적으로 사용되는 apt-get 및 apt-cache 기능을 결합하지만 apt-get과 하위 호환되지는 않습니다. 따라서 apt-get 명령을 항상 apt로 바꿀 수는 없습니다.

apt, apt-get 명령 비교

apt 명령어 apt-get, apt-cache, dkpg 명령어  설명
apt update apt-get update Refreshes repository index
apt install [package] apt-get install [package] Install a package
apt upgrade apt-get upgrade Upgrade available package updates
apt remove [package] apt-get remove[package] Remove a package
apt purge [package] apt-get purge [package] Remove a package with configuration
apt autoremove apt-get autoremove Remove unnecessary dependencies
apt full-upgrade apt-get dist-upgrade Update all packages and remove unnecessary dependencies
apt search [package] apt-cache search [package] Search for a package
apt show [package] apt-cache show [package] Show package details
apt policy apt-cache policy Show active repo information
apt policy [package apt-cache policy [package] Show installed and available package version
apt list --installed dpkg --list Show installed package

 

5) apt 새 명령어

apt에는 몇 가지 추가 기능을 제공하는 명령어가 있습니다.

새로운 apt 명령기능

apt list List installed packages and upgradable packages
apt edit-sources Edits sources list

 

 

basic task(기본 작업 만들기) vs task(작업 만들기)

 

 

'이것저것' 카테고리의 다른 글

스택(Stack)과 힙(Heap) 차이점  (0) 2022.01.02
전처리기  (0) 2021.12.31
apt vs apt-get 차이  (2) 2021.12.28
cron(UNIX/Linux) - 작업 예약 명령 - 수정  (0) 2021.12.14
crontab(Unix/Linux) 실행 시 환경변수  (0) 2021.12.14

CentOS 6.4에서는 RHEL6 버전부터 사용된 anacron이 채용되어 있습니다.

이로 인해 RHEL5 버전까지 crontab에 설정되어 있던 run-part부분, 즉 /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 의 실행부분이 빠지게 됩니다.

자세한 내용은 anacron에서 확인하세요.

cron

리눅스에서는 일반적으로 cron 데몬이 주기적인 작업 실행을 처리한다. cron이 시작될 때부터 끝날 때까지 계속 실행되며 cron 설정 파일은 cron table을 줄여서 crontab이라 부른다.

 

특정한 시간 또는 특정 시간마다 어떤 작업을 자동으로 수행하고자 할 때 cron 명령어 사용

crontab은 cron 작업을 설정하는 파일

 

* * * * * command(s)
^ ^ ^ ^ ^
| | | | |     allowed values
| | | | |     -------
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

Run a Cron Job Every 10 Minutes

To run a cron job every 10 minutes, add the following line in your crontab file:

*/10  * * * * command

 

/var/spool/cron/

 

 

Unix/Linux shell script를 cron으로 동작시킬때 .bashrc .bash_profile .profile 의 변수가 적용되지 않는다.

 

.profile .cshrc .bashrc .bash_profile 등의 초기화 파일은  login shell 또는 interactive shell에서만 실행되기 때문에

crontab 으로 수행 시 초기화파일에 정의한 환경변수는 적용되지 않는다.

아래 3가지 방법 중 하나로 적용하면 환경변수가 적용되어 crontab에 등록한 쉘이 정상 작동한다.

 

설정방법

 

1. shell script 안에 초기화파일을 수행하는 라인 추가

#!/bin/bash

 . ~/.bash_profile

 

2. 쉘 script의 첫 라인에 bash -login 옵션을 사용.  --login 옵션(-l과 동일)을 사용하면 초기화파일이 모두 수행된다.

#!/bin/bash --login

 

3. root 유저로 수행

root 유저의 cron에 등록하여 su 스위치를 -c 옵션과 같이 사용하면 초기화파일이 수행된다.

예)   0 0 * * * su - username -c /home/username/check.sh

 

 

+ Recent posts