42Seoul/get_next_line

2. OPEN_MAX, 연결리스트 vs 배열

재윤 2023. 4. 8. 21:04
반응형

OPEN_MAX

파일 디스크립터는 최대값이 있다.

일반적으로 파일 디스크립터 값은 0 ~ OPEN_MAX 까지 둘 수 있으며, OPEN_MAX라는 매크로 값은 코드가 실행되는 환경 (플랫폼)에 따라 다르다. 이는 limits.h에서 확인 가능하다. 만일 윈도우 환경이라면 stdio.h의 FOPEN_MAX에서 확인할 수 있다.

 

우리가 bonus를 풀기 위해 컴퓨터에서 최대한 파일을 몇 개 열 수 있는 지를 알아야 OPEN_MAX 값을 알 수가 있다.

그 방법으로는 ulimit 명령어를 사용하면 된다.

 

ulimit는 무엇인가?

ulimit은 프로세스의 자원 한도를 설정하는 명령어

ulimit [옵션] 값 ( Centos , RHEL 기준)

  • a : 모든 제한 사항을 보여줌.
  • c : 최대 코어 파일 사이즈
  • d : 프로세스 데이터 세그먼트의 최대 크기
  • f : shell에 의해 만들어질 수 있는 파일의 최대 크기
  • s : 최대 스택 크기
  • p : 파이프 크기
  • n : 오픈 파일의 최대수
  • u : 오픈파일의 최대수
  • v : 최대 가상메모리의 양
  • S : soft 한도
  • H : hard 한도

hard와 Soft의 차이점은 무엇인가?

ulimit은 프로세스의 자원 한도를 설정하는 명령어

soft: 새로운 프로세스가 생성될 때 기본적으로 적용되는 한도를 의미

hard : soft 한도에서 최대 늘릴 수 있는 한도를 의미

 

man에서의 ulimit의미

ulimit

:우리가 접속하는 shell이나 실행시키는 프로세스가 사용할 수 있는 머신의 자원의 조절을 제공한다

ex) 우리가 실행시키고 있는 프로세스에서 동시에 사용하는 파일 수 등을 조절할 수 있다.

 

머신의 자원 제한에는 hard limit와 soft limit가 있다.

hard limit: 한 번 설정되면 root 권한이 아닌 유저에 의해 값이 증가 할 수 없다.

soft limit: hard limit까지 조절 될 수 있다

 

만약 명령어를 사용할 때 -H, -S를 명시해주지 않으면 동시에 설정된다고 한다.

만약 값이 설정되지 않으면 자원에 대한 soft limit 값이 특정된다.

 

파일 디스크립트 개수를 알아보자

file descriptors를 보면 되는데 비주얼 스튜디오 코드와 터미널의 값이 다르게 나온다?

ulimit -a

  1. iTerm에서 나오는 결과값

2. 비쥬얼에서 나오는 결과값

왜 다르게 나오는 것인가?

VSC(Visual Studio Code) 및 iTerm의 파일 설명자 수 제한은 목적과 요구 사항이 다른 두 가지 유형의 소프트웨어 프로그램이기 때문에 다를 수 있습니다.

파일 디스크립터는 운영 체제가 입력 및 출력 작업을 관리하기 위해 프로그램에 할당하는 리소스 유형입니다. 파일 디스크립터의 수는 프로그램이 동시에 열 수 있는 파일 또는 네트워크 연결 수를 제한합니다.

VSC는 여러 파일을 동시에 열고 조작해야 하는 소프트웨어 개발에 사용되는 코드 편집기입니다. 따라서 VSC는 이 기능을 허용하기 위해 파일 설명자에 대해 더 높은 기본 제한을 가질 수 있습니다.

반면에 iTerm은 macOS 또는 Linux와 같은 Unix 기반 운영 체제에 대한 명령줄 액세스에 사용되는 터미널 에뮬레이터입니다. 한 번에 더 적은 수의 파일과 연결을 처리하도록 설계되었기 때문에 파일 설명자에 대한 기본 제한이 더 낮을 수 있습니다.

또한 파일 설명자에 대한 제한은 운영 체제 구성 및 VSC 또는 iTerm에 적용된 특정 설정 또는 기본 설정의 영향을 받을 수 있습니다.

 

즉 쉽게 말해서

: 비쥬얼 스튜디오 코드의 목적은 많은 파일들을 열어 프로그램을 쉽게 짤 수 있게 만든 것이 목적이기 때문에 사용자에게 파일을 열 수 있는 제한을 최대로 나타내어주는 것이고 반면 iTerm은 명령어로 실행되는 친구인데 파일을 엄청 많이 열어 편집을 하려고 만든 것이 아니다. iTerm은 컴퓨터와 대화하는 수단이라고 생각하면 좋을 것 같다.

 

파일 스크립트를 많이 사용하면 메모리에 부담이 오는가?

파일 디스크립터 개수 제한을 최대로 설정하면 프로그램에서 파일 디스크립터를 어떻게 사용하느냐에 따라 메모리 사용량에 부담이 될 수 있습니다. 각 파일 디스크립터는 상태를 유지하기 위해 약간의 메모리가 필요하므로 동시에 열려 있는 파일 디스크립터가 너무 많으면 상당한 메모리 리소스를 사용할 수 있습니다.

그러나 메모리 사용량에 미치는 영향은 특정 프로그램 및 사용 패턴에 따라 달라집니다. 프로그램이 많은 수의 열린 파일이나 네트워크 연결을 관리해야 하는 경우 리소스 부족을 방지하기 위해 파일 설명자 제한을 늘려야 할 수 있습니다. 이러한 경우 메모리 사용량과 기능 간의 절충안이 허용될 수 있습니다.

시스템이 할당할 수 있는 총 파일 설명자 수는 운영 체제의 커널 설정에 의해 제한된다는 점에 유의하는 것이 중요합니다. 따라서 제한을 너무 높게 설정하면 시스템에서 실행 중인 다른 프로그램에 잠재적으로 문제가 발생하여 성능 저하 또는 충돌이 발생할 수 있습니다. 최대값으로 설정하기 전에 증가된 파일 설명자 제한을 지원하기 위해 시스템에 사용 가능한 메모리와 리소스가 충분한지 확인하는 것이 중요합니다.

 

 

연결 리스트 vs 배열

42서울에서 카뎃분들이 연결 리스트로만 구현을 해야된다. 라는 말씀이 많습니다. 그 이유를 들어보면 시간 복잡도를 비교 했을 때 당연히 연결 리스트는 느릴 수 있지만 어떤 운영체제나 프로세스에서 우리가 작성한 코드는 돌아가야 한다고 라고 배열로 푼 카뎃분들에게 이렇게 말씀을 합니다.

 

이 부분에 대해서 2가지로 말씀드리겠습니다.

  1. 현재 get_next_line과제를 한다는 것은 다른 운영체제를 생각하지 않아도 되는 것.
  2. 42서울에서 동료평가를 진행할 때의 지침은 클러스터 PC에서 진행을 해야된다.

동료 평가 지침

 

연결 리스트로만 구현해야 한다고 말씀드리는 카뎃분들의 말씀도 일리가 있습니다. 저희가 작성하는 소스 코드들은 당연히 다른 운영체제에서도 결과값이 제대로 나와야하는 것입니다. 하지만 현재 저희에게 주어진 과제에 대한 문제에서는 다른 운영체제를 고려하라는 말이 없었습니다. 그래서 저는 배열로 보너스 문제에 접근을 해도 된다고 생각합니다.

 

결론

OPEN_MAX를 공부하는 이유는 보너스 문제에서 다양한 파일들을 열어 쉽게 접근 할 수 있도록 코드를 작성하기 위해 이것을 공부하는 것입니다. 이 부분에 대해서도 제대로 이해했다면 보너스 파트는 쉽게 작성하실 수 있을 것입니다.

 

참고 블로그

[Linux] ulimit 설명 및 설정방법

 

[Linux] ulimit 설명 및 설정방법

ulimit 이란? ulimit는 프로세스의 자원 한도를 설정하는 명령, soft한도,hard한도 두가지로 나뉨 soft : 새로운 프로그램을 생성하면 기본으로 적용되는 한도 hard : 소프트한도에서 최대로 늘릴 수 있는

sysops.tistory.com

[Parameter] ulimit 및 hard,soft 제한

 

[Parameter] ulimit 및 hard,soft 제한

[root@vmsvr ~]# su - appuser su: cannot set user id: Resource temporarily unavailable 해당 계정에 대한 오픈 파일 개수, 프로세스 개수 확인 [root@vmsvr ~]# lsof | wc -l 38917 // 전체 파일 오픈 갯수 [root@vmsvr ~]# lsof -u suser |

banggucha.tistory.com

ulimit에 대해 알아보자

 

ulimit에 대해 알아보자

안녕하세요 여러분! 공부하는 개발자입니다 😉 오늘은 linux에서 사용하는 ulimit 명령어에 대해 알아보려고 합니다! 사용 OS : Amazon Linux 2 (RHEL) 사용 머신 : t2.medium 1. ulimit이란? ulimit 명령어의 man

lannstark.tistory.com

[Linux] ulimit 설명 및 설정방법

 

[Linux] ulimit 설명 및 설정방법

ulimit 이란? ulimit는 프로세스의 자원 한도를 설정하는 명령, soft한도,hard한도 두가지로 나뉨 soft : 새로운 프로그램을 생성하면 기본으로 적용되는 한도 hard : 소프트한도에서 최대로 늘릴 수 있는

sysops.tistory.com

 

반응형