www.delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
DomainKey-Signature: | a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id |
:list-unsubscribe:list-subscribe:list-archive:list-post | |
:list-help:sender:date:from:to:subject:message-id:reply-to | |
:references:mime-version:content-type:in-reply-to; q=dns; s= | |
default; b=DIRnZ3nsXHbXjNvvl9een/7v+LkJHOmFp/zmyuhAfYiymt5w2xK8d | |
aVd2fd8abu04W1DEAetwdjzZz39yhs1FbL9sFz0zSc+W/HLHnkNzUPEEQpoREL1l | |
w9Qp0HxGh65LZEVqUHUk0AdLyWPi2mCKSnW3zSb91bJKQBcSQyfNPU= | |
DKIM-Signature: | v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id |
:list-unsubscribe:list-subscribe:list-archive:list-post | |
:list-help:sender:date:from:to:subject:message-id:reply-to | |
:references:mime-version:content-type:in-reply-to; s=default; | |
bh=0pe1oHYQAW0/VhJvNw6CdUWunjg=; b=Fs9rc9UQ3IxK5lBJ16uhjc+VKEp8 | |
rxZmydgYT9ufNG3f27LOrSsZveYi6mClwhJP3tt5n0+sUH67LlCCEHQfs9b3Itj4 | |
o4NG2l1J8MW/tzhG/ewOJx/bfAHTdWZzdObzkn7VzC1LNSTI9O3SrtmrhFs1Bd/m | |
W+6W3gaUNL878cg= | |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Id: | <cygwin.cygwin.com> |
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
List-Archive: | <http://sourceware.org/ml/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
Sender: | cygwin-owner AT cygwin DOT com |
Mail-Followup-To: | cygwin AT cygwin DOT com |
Delivered-To: | mailing list cygwin AT cygwin DOT com |
Authentication-Results: | sourceware.org; auth=none |
X-Virus-Found: | No |
X-Spam-SWARE-Status: | No, score=-101.9 required=5.0 tests=AWL,BAYES_00,GOOD_FROM_CORINNA_CYGWIN,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=hood, facet |
X-HELO: | drew.franken.de |
X-Spam-Score: | -2.9 |
Date: | Mon, 19 Feb 2018 18:19:14 +0100 |
From: | Corinna Vinschen <corinna-cygwin AT cygwin DOT com> |
To: | cygwin AT cygwin DOT com |
Subject: | Re: Atomic mmap replacement |
Message-ID: | <20180219171914.GA3619@calimero.vinschen.de> |
Reply-To: | cygwin AT cygwin DOT com |
Mail-Followup-To: | cygwin AT cygwin DOT com |
References: | <66bf4f86-4618-b9a3-3e33-2c240b9204d0 AT cornell DOT edu> <20180219090042 DOT GC3417 AT calimero DOT vinschen DOT de> <bf821c51-5cea-a3b9-3b24-812cdb8a7b9c AT cornell DOT edu> |
MIME-Version: | 1.0 |
In-Reply-To: | <bf821c51-5cea-a3b9-3b24-812cdb8a7b9c@cornell.edu> |
User-Agent: | Mutt/1.9.2 (2017-12-15) |
--NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Feb 19 08:22, Ken Brown wrote: > On 2/19/2018 4:00 AM, Corinna Vinschen wrote: > > On Feb 17 22:37, Ken Brown wrote: > > > Some code in emacs wants to reserve a chunk of address space with a b= ig > > > PROT_NONE anonymous mapping, and then carve it up into separate mappi= ngs > > > associated to segments of a file. This fails on Cygwin. Here's a te= st case > > > that illustrates the problem: > > > [...] > > Several limitations in the Windows kernel disallow this: > >=20 > > - It doesn't allow to unmap parts of a map, only the entire map as a > > whole. > > Cygwin has a workaround: If you unmap parts of a map it just keeps > > track of this and sets the protection of the affected pages to > > PAGE_NOACCESS. In case of anonymous mappings, it even recycles them > > potentially for other mappings. > >=20 > > - It also disallows to re-map any allocated or mapped mamory for another > > purpose. > >=20 > > So this part of the POSIX specs for mmap: > >=20 > > "The mapping established by mmap() shall replace any previous mappin= gs > > for those whole pages containing any part of the address space of t= he > > process starting at pa and continuing for len bytes" > >=20 > > can't be implemented with Windows means. > >=20 > > The only workaround possible would be to handle this *exact* scenario as > > a special case in Cygwin's mmap: If the new mapping falls in the middle > > of an existing mapping and if the original mapping was an anonymous > > mapping with PROT_NONE page protection, then On second thought, we *could* do this, if the pages have been mmapped before(*). Unfortunately this would require a *major* revamp of the page handling in mmap. We would have to keep the mapping of every single 64K page separate. I.e., requesting a file mapping of 256K at offset 0 on the POSIX level would have to be handled as four Windows file mappings under the hood: 1. a 64K file mapping at offset 0 2. a 64K file mapping at offset 65536 3. a 64K file mapping at offset 131072 4. a 64K file mapping at offset 196608 A request to mmap another 64K page to the third mapping in this example could then be done by unmapping the third mapping and replace it with the requested mapping. I'm not sure this is feasible. It would complicate and slow down the code especially for big mappings; one call to NtCreateSection and one to NtMapViewOfSection per 64K page, plus the overhead of making sure that all mappings are in the right, sequential order in memory. Plus the overhead of having to remap a lot more mappings in forked children. The "Cygwin is slow" meme would get another interesting facet :} (*) Meaning: We still couldn't call mmap on addresses allocated on the heap. Corinna --=20 Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Maintainer cygwin AT cygwin DOT com Red Hat --NzB8fVQJ5HfG6fxh Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEoVYPmneWZnwT6kwF9TYGna5ET6AFAlqLBxIACgkQ9TYGna5E T6AdwhAAkLiJ3NgqVXQUkEO5ng7sSC1JBXCn17VyTpQ6Tup7likTLxLbZWJG1pRb YLunQb2l8PK/C3EiqmXBGEYs7mBo6bG2d2qFTGhB6pmBKI3yOCZ0vSnmaDmuar2Q eJpDXj+LM+Z7bhKAGP+aRcbXLN1LbWHF66ZsD7v9IQO/l4CsWXZGT8T/u1VYV5qy gcdIoSzxlyyzZu8VpFRXC/ig69/TAz39uGDUkuIysJcUvXqyZemI5kyZGt422HFH iH7/i/LezfHLCbal0Q2ar81DLvTKprU+1y66ILm+ONqHMHPk0BXd9X38r+Guy/nP hMvdq6EgWk9YKYd9DP4H3Uqo8iOfgEelPbiV6ZE4r9EuP15nS9sY7cL1hQSSLFaZ FRh8wQTrsT9gjKm0nMpDoSw5Y9WqIq0QlE/TI04XfsCZcYvybRD7mbMqSuyf4qxd 5GvlA3KidA5Er7v8cpPst4kbQN4k5i+xgMmNZh2MblM+z0tmIOGij9EcVgvn4g29 zR2sj5jOh1Db12aTfMuu1jpjpgMs43TdSnfw+mVgja0gm/pT/3xdeq+wwY34zya/ h7eVZRUsFeagOy0QhWfxi/g3FM6iWM/7UhaZ/JKOEoukYAs5fJEbtaXbfJracuiU DdtCbuBg1vR3nK4YT/VfepA5Bz6peyaUHPWxRdoRGB7Z2KYw/80= =6+l0 -----END PGP SIGNATURE----- --NzB8fVQJ5HfG6fxh--
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |